不含当前行的 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.apply
与 shift
和 rolling
结合使用
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
我需要计算前 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.apply
与 shift
和 rolling
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