在Pandas中能否用cumsum对5000个分类的PERIOD_BAL做分组累计求和?
针对分类字段的累计求和实现方案(Pandas)
1. 用Pandas的cumsum实现需求
完全可以用cumsum实现,这是最简洁高效的方式。核心思路是先按Entity_Acc分组,再对每组的PERIOD_BAL做累计求和。
示例代码:
import pandas as pd # 假设你的数据框是df,包含Entity_Acc和PERIOD_BAL字段 # 第一步:确保数据按业务需要的顺序排序(比如时间顺序,累计求和依赖行顺序) df = df.sort_values(by=['Entity_Acc', '记账日期']) # 替换成你的排序字段,无排序需求可跳过 # 第二步:分组后执行累计求和,生成新列 df['累计_PERIOD_BAL'] = df.groupby('Entity_Acc')['PERIOD_BAL'].cumsum()
注意:累计求和的结果和行的顺序直接相关,必须先把每组内的数据按业务逻辑排好(比如交易时间、记账顺序),否则结果会不符合预期。
2. 其他实现方式
除了cumsum,还有几种替代方案,但都不如groupby+cumsum简洁高效:
- 用
expanding结合分组:效果和cumsum一致,但代码稍长df['累计_PERIOD_BAL'] = df.groupby('Entity_Acc')['PERIOD_BAL'].expanding().sum().reset_index(level=0, drop=True) - 手动循环分组(不推荐):仅适合极小数据量,性能极差,分类多的时候完全没必要用。
3. 5000个分类的适用性
完全可以用cumsum。Pandas的groupby和cumsum都是底层基于C实现的矢量化操作,处理5000个分类毫无压力——哪怕数据有几十万行,也能在几秒内完成计算。相比循环遍历每个分类的方式,矢量化操作的性能提升是数量级的,放心用就行。
内容的提问来源于stack exchange,提问作者Samuel Frankland
相关产品推荐
相关产品推荐

