连续行中的 Groupby 累积操作 pandas

Groupby cumulative operations in successive rows pandas

我想在 df

中的 A 中找到相同值的列 B 的滚动总和和滚动最大值
df = pd.DataFrame({'A': ['a', 'a', 'a', 'b', 'b', 'b', 'b'], 'B': [5, 2, 4, 7, 1, 11, 3]})

df_result = pd.DataFrame({'A': ['a', 'a', 'a', 'b', 'b', 'b', 'b'], 'B': [5, 2, 4, 7, 1, 11, 3], 'SUM': [5, 7, 11, 7, 8, 19, 22], 'MAX': [5, 5, 5, 7, 7, 11, 11]})

使用groupby with aggregation by agg and functions cummax and cumsum, last join 为原文:

d = {'cummax':'max', 'cumsum':'sum'}
df_result = df.join(df.groupby('A')['B'].agg(['cummax','cumsum']).rename(columns=d))
print (df_result)
   A   B  max  sum
0  a   5    5    5
1  a   2    5    7
2  a   4    5   11
3  b   7    7    7
4  b   1    7    8
5  b  11   11   19
6  b   3   11   22

如果可以修改原文DataFrame:

df[['max','sum']] = df.groupby('A')['B'].agg(['cummax','cumsum'])
print (df)
   A   B  max  sum
0  a   5    5    5
1  a   2    5    7
2  a   4    5   11
3  b   7    7    7
4  b   1    7    8
5  b  11   11   19
6  b   3   11   22