如何在Pandas DataFrame中实现跨组累计求和(非组内)
实现跨组累计求和生成CumulativeTotal列
给定如下Pandas DataFrame,包含group和weeklyTotal两列,需要生成第三列CumulativeTotal,实现跨组累计求和(而非组内累计):
import pandas as pd df = pd.DataFrame({'group':['A','A','A','B','B','B','C','C','C'], 'weeklyTotal':[1,1,1,3,3,3,2,2,2]})
解决方案
可以通过「提取组级唯一值→计算跨组累计→映射回原DataFrame」的方式直接实现,无需额外创建中间表:
# 提取每个组的weeklyTotal唯一值并计算跨组累计求和 group_cum_sum = df.groupby('group')['weeklyTotal'].first().cumsum() # 将累计值映射到原DataFrame的对应组行 df['CumulativeTotal'] = df['group'].map(group_cum_sum)
结果展示
执行后得到的DataFrame如下:
| group | weeklyTotal | CumulativeTotal |
|---|---|---|
| A | 1 | 1 |
| A | 1 | 1 |
| A | 1 | 1 |
| B | 3 | 4 |
| B | 3 | 4 |
| B | 3 | 4 |
| C | 2 | 6 |
| C | 2 | 6 |
| C | 2 | 6 |
说明
groupby('group')['weeklyTotal'].first():提取每个组的首个weeklyTotal值(因同组值一致,用mean/max等方法结果相同).cumsum():对组级别的值执行跨组累计求和map(group_cum_sum):将每个组对应的累计值批量赋值给原DataFrame的所有同组行
内容的提问来源于stack exchange,提问作者Justin Beresford
相关产品推荐
相关产品推荐

