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

Pandas按品牌分组计算同分类下12个月滚动销售额方法

实现代码

你的数据已经提前按Brand、Date排序完成,直接按品牌分组后执行滚动计算即可,代码如下:

df['12m_rolling'] = df.groupby('Brand')['sales']\
    .rolling(window=12, min_periods=12)\
    .sum()\
    .reset_index(drop=True)
逻辑说明
  • 先通过groupby('Brand')将数据按品牌拆分为独立计算单元,所有滚动计算仅在单个品牌的分组内执行,不会跨品牌取数,自然满足「新品牌首次出现后前11条记录值为NaN」的要求
  • 滚动计算的参数window=12, min_periods=12和你原有代码逻辑完全一致:窗口长度为12条记录,只有凑够12条有效数据时才返回求和结果,不足12条的位置返回NaN
  • 末尾的reset_index(drop=True)用于清除分组+滚动操作生成的多层索引,保证计算结果的行顺序和原DataFrame完全匹配,避免赋值错位
特殊场景适配

如果你的数据存在品牌月度记录缺失(比如某品牌缺了某几个月的销售数据,行记录不连续),上述按行计数的滚动逻辑会出现误差,此时需要先将日期转为时间类型设为索引,使用时间维度窗口计算,代码参考:

# 适配缺月场景:按自然12个月窗口计算
df = df.set_index(pd.to_datetime(df['Date']))
df['12m_rolling'] = df.groupby('Brand')['sales']\
    .rolling('365D', min_periods=12)\
    .sum()\
    .reset_index(drop=True)
df = df.reset_index()

内容的提问来源于stack exchange,提问作者Maksim .Levin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:24:21