不含当前行的 Python 中的累计和

Cumulative sum in Python without the current row

我需要计算前 3 行的累计和而不计算当前行,这里是一个简短的例子:

ID SUM
A 10
B 5
B 4
B 1
B 2
C 1
C 3

这就是我想要达到的结果:

ID SUM
A 0
B 0
B 5
B 9
B 10
C 0
C 3

你可以试试:

df['SUM'] = (df.groupby('ID')['SUM']
               .transform(lambda x: x.rolling(4,min_periods=1).sum())
               .sub(df['SUM'])
            )

输出:

  ID  SUM
0  A    0
1  B    0
2  B    5
3  B    9
4  B   10
5  C    0
6  C    1

groupby.applyshiftrolling

结合使用
df['SUM'] = df.groupby('ID')['SUM'].apply(lambda x: x.shift(fill_value=0)
                                                     .rolling(3,min_periods=1).sum())

Out[50]:
  ID   SUM
0  A   0.0
1  B   0.0
2  B   5.0
3  B   9.0
4  B  10.0
5  C   0.0
6  C   1.0