pandas 在每一行按月计算 3 个月的累计总和

pandas calculate 3 months cummulative sum on monthly basis at each row

我正在尝试为每个行级别计算过去 3 个月的 cumsum。所以,我的主要数据框看起来像这样

ID Month Level_1
1 AUG_15 1
1 SEP_15 0
1 OCT_15 1
1 NOV_15 1
1 DEC_15 0
1 JAN_16 1
1 FEB_16 1
1 MAR_16 1
2 AUG_15 1
2 SEP_15 1
2 OCT_15 1
2 NOV_15 1
2 DEC_15 1
2 JAN_16 1
2 FEB_16 1
2 MAR_16 1

我的最终期望输出是

ID Month Level_1 Level_1_m3
1 AUG_15 1 1
1 SEP_15 0 1
1 OCT_15 1 2
1 NOV_15 1 2
1 DEC_15 0 2
1 JAN_16 1 2
1 FEB_16 1 2
1 MAR_16 1 3
2 AUG_15 1 1
2 SEP_15 1 2
2 OCT_15 1 3
2 NOV_15 1 3
2 DEC_15 1 3
2 JAN_16 1 3
2 FEB_16 1 3
2 MAR_16 1 3

所以,基本上 m3 列从特定的最后三个月开始查看并计算 cumsum。 例如对于 ID 1 和月份 Mar_16,cumsum 值为 3,因为它是使用 Mar_16、Feb_16 和 Jan_16.

的值计算得出的

在 pandas 中是否有内置方法可以帮助实现此目的?

所以,确实有人发布了一个答案(后来被删除了)我应该探索 pandas 滚动方法并且它完成了工作。

这是我目前的解决方案:-

df.groupby('ID')['Level_1'].rolling(3, min_periods=1).sum()

如果您的数据已经排序,另一种方法是使用 shift

df["Level_1_m3"]=df["Level_1"]+df["Level_1"].shift(1).fillna(0)+df["Level_1"].shift(2).fillna(0)