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

如何在Pandas中按产品分组计算往期日期的累计求和?

Pandas实现同产品往期Volumes累计求和

问题描述

我有如下Pandas DataFrame:

import pandas as pd
df = pd.DataFrame({ 
    'Date': ['2018-04-01', '2018-05-01', '2018-06-01', '2018-07-01', '2018-08-01'], 
    'Product': ['a', 'a', 'a', 'b', 'b'], 
    'Volumes': [10,30,40,50,60]
})

对应的表格:

DateProductVolumes
2018-04-01a10
2018-05-01a30
2018-06-01a40
2018-07-01b50
2018-08-01b60

我希望新增一列Result,对同一款产品的所有往期月份(包括当前月份)的Volumes进行求和,期望输出如下:

DateProductVolumesResult
2018-04-01a1010
2018-05-01a3040
2018-06-01a4080
2018-07-01b5050
2018-08-01b60110

解决方案

这其实是个典型的分组累计求和需求,用Pandas的groupby+cumsum()就能轻松实现:

核心思路

  • 按Product字段分组,确保我们只在同一款产品的范围内计算求和
  • 对分组后的Volumes列使用cumsum()方法,该方法会在每个分组内从第一行开始逐行累计相加,正好对应你需要的“往期(含当前)Volumes总和”

完整代码

import pandas as pd

# 原始数据
df = pd.DataFrame({ 
    'Date': ['2018-04-01', '2018-05-01', '2018-06-01', '2018-07-01', '2018-08-01'], 
    'Product': ['a', 'a', 'a', 'b', 'b'], 
    'Volumes': [10,30,40,50,60]
})

# 新增Result列:按Product分组后计算累计求和
df['Result'] = df.groupby('Product')['Volumes'].cumsum()

# 查看结果
print(df)

补充说明

如果你的原始数据没有按日期顺序排列,建议先按Product和Date排序后再计算,避免累计结果出错:

# 先排序再计算累计求和
df = df.sort_values(by=['Product', 'Date'])
df['Result'] = df.groupby('Product')['Volumes'].cumsum()

内容的提问来源于stack exchange,提问作者Amy D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:28:12