【发布时间】:2021-03-23 05:05:14
【问题描述】:
我需要在不计算当前行的情况下找到前 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 |
【问题讨论】:
标签: python pandas dataframe rolling-computation
我需要在不计算当前行的情况下找到前 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 |
【问题讨论】:
标签: python pandas dataframe rolling-computation
将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
【讨论】:
你可以试试:
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
【讨论】: