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

Pandas:按Category分组计算移动平均遇到问题求助

按'category'分组计算移动平均的正确解决方法

常见问题根源

你大概率是没在组内限定移动窗口,误用到了全局窗口,导致结果不符合预期。下面分两种常用工具给出准确实现:


Pandas实现(Python)

  1. 先按分组列+时间列排序,保证移动平均的时间顺序正确:
df = df.sort_values(['category', 'date'])
  1. 分组后调用rolling计算组内移动平均,最后重置索引对齐结果:
# 以3期移动平均为例,min_periods=1允许开头不足3个数据时计算均值
df['rolling_mean'] = df.groupby('category')['value'].rolling(window=3, min_periods=1).mean().reset_index(level=0, drop=True)

核心是reset_index(level=0, drop=True),它会移除分组产生的层级索引,让计算结果能和原DataFrame完美匹配,避免索引错位问题。


SQL实现

用窗口函数指定分区(分组)和窗口范围:

SELECT 
    category,
    date,
    value,
    -- 3期移动平均:当前行+前两行
    AVG(value) OVER (
        PARTITION BY category 
        ORDER BY date 
        ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
    ) AS rolling_mean
FROM your_table;

PARTITION BY category确保只在同类别内计算,ORDER BY date保证窗口按时间顺序滑动,ROWS BETWEEN...定义了移动窗口的范围。


额外注意事项

  • 窗口大小根据业务需求调整,比如改成window=7就是7期移动平均;
  • 数据有缺失值时先处理(填充/删除),否则会导致移动平均结果出现NaN;
  • min_periods参数可以控制最少需要多少个有效数据才计算均值,避免开头出现过多空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:54:41