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

Pandas按ID和年份分组对DataFrame连续行求差值拆分YTD月度销售

问题背景

现有名为mydf的DataFrame,存储按ID分组的月度YTD格式销售数据,示例仅展示1个ID分组,实际包含多个ID,数据结构如下:

Date        ID      Sales
    2020-01-01  B0118   63975
    2020-02-01  B0118   114568
    2020-03-01  B0118   202849
    2020-04-01  B0118   280112
    2020-05-01  B0118   336854
    2020-06-01  B0118   377005
    2020-07-01  B0118   437183
    2020-08-01  B0118   517220
    2020-09-01  B0118   589187
    2020-10-01  B0118   632946
    2020-11-01  B0118   701808
    2020-12-01  B0118   766152
    2021-01-01  B0118   57883
    2021-02-01  B0118   99555
    2021-03-01  B0118   190112
    2021-04-01  B0118   289180
    2021-05-01  B0118   338044
    2021-06-01  B0118   373061
需求目标

同一ID、同一年份的分组内:

  • 每年第一个月的销售数值保持不变
  • 其余月份的销售数值减去上一行的YTD销售额,得到当月实际销售额
    预期输出结果如下:
Date        ID      Sales   dif
    2020-01-01  B0118   63975   63975
    2020-02-01  B0118   114568  50593.0
    2020-03-01  B0118   202849  88281.0
    2020-04-01  B0118   280112  77263.0
    2020-05-01  B0118   336854  56742.0
    2020-06-01  B0118   377005  40151.0
    2020-07-01  B0118   437183  60178.0
    2020-08-01  B0118   517220  80037.0
    2020-09-01  B0118   589187  71967.0
    2020-10-01  B0118   632946  43759.0
    2020-11-01  B0118   701808  68862.0
    2020-12-01  B0118   766152  64344.0
    2021-01-01  B0118   57883   57883   
    2021-02-01  B0118   99555   41672.0
    2021-03-01  B0118   190112  90557.0
    2021-04-01  B0118   289180  99068.0
    2021-05-01  B0118   338044  48864.0
    2021-06-01  B0118   373061  35017.0
现有问题

当前编写的代码仅按ID分组计算差值,无法实现按年份拆分的需求:

mydf['dif'] = mydf.groupby('ID')['Sales'].diff(1)
解决方法

你需要将ID和年份同时作为分组键,保证差值计算只在同一个ID、同一年的范围内生效,最后将每年首行diff产生的空值用原Sales值填充即可:

  1. 首先确保Date列为日期类型(如果已经是日期类型可跳过第一步)
  2. 按ID+年份分组计算差值,空值填充原销售额
# 转换日期类型
mydf['Date'] = pd.to_datetime(mydf['Date'])
# 按ID+年份分组计算差值
mydf['dif'] = mydf.groupby(['ID', mydf['Date'].dt.year])['Sales'].diff().fillna(mydf['Sales'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 23:36:01