You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas如何按列唯一值分组实现累计求和(无需for循环)

Pandas按分组计算累计值的无循环实现

需求场景

现有如下结构的交易收益DataFrame,行索引为交易日期date:

df
            account  PnL  
date
2022-01-01        1  100  
2022-01-01        2   30  
2022-01-02        1   -5   
2022-01-02        2   10
2022-01-03        1   10   
2022-01-03        2    5

需要新增cumulative_PnL列,按account账户分组计算每组PnL列的累计求和值,禁止使用显式for循环,采用符合Python风格的写法实现,最终预期结果如下:

df
            account  PnL  cumulative_PnL 
date
2022-01-01        1  100  100
2022-01-01        2   30   30
2022-01-02        1   -5   95
2022-01-02        2   10   40
2022-01-03        1   10  105
2022-01-03        2    5   45 

实现代码

直接使用pandas内置的分组累计求和接口即可,一行代码完成需求:

df['cumulative_PnL'] = df.groupby('account')['PnL'].cumsum()

实现逻辑说明

  • groupby('account')会按照账户字段对数据做逻辑分组,不需要手动遍历每个分组对象
  • 分组后选取PnL列调用cumsum()累计求和方法,计算结果会自动和原DataFrame的行索引对齐,不需要额外做表合并、索引重置操作
  • 整个计算为pandas底层实现的向量化运算,执行效率远高于手写for循环,是pandas官方推荐的标准写法

前置校验:执行上述代码前请确认DataFrame已经按date日期升序排列,否则累计求和的顺序会和预期不符。如果数据未排序,可以先执行排序操作:

df = df.sort_values(['account', 'date'])

内容的提问来源于stack exchange,提问作者MathMan 99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 20:27:20