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

Pandas 计算指定分组过去3天滚动平均值的实现方案

Pandas 多分组维度下3天滚动平均值实现

核心实现逻辑

实现该需求的核心逻辑分为3步:

  • 预处理阶段将日期列转换为标准时间格式,按「分组维度+时间」排序,确保每个独立分组内的时间序列有序,避免滚动窗口取值错乱
  • 按需要独立计算的维度(本题为category、sub-category)做分组隔离,禁止跨组混算滚动值
  • 配置符合要求的滚动窗口参数:设置窗口长度为3,最小有效观测数为3,即不足3条数据时返回空值,匹配预期输出规则

可运行代码

import pandas as pd

# 读取原始结构化数据
df = pd.read_csv("your_source_data.csv")
# 转换日期列为pandas可识别的时间类型
df["day"] = pd.to_datetime(df["day"])
# 按分组维度+日期升序排序,重置索引
df = df.sort_values(by=["category", "sub-category", "day"]).reset_index(drop=True)

# 分组计算过去3天滚动平均值
df["rolling_average_past_3_days"] = (
    df.groupby(["category", "sub-category"])["count"]
    .transform(
        lambda series: series.rolling(window=3, min_periods=3).mean().round(1)
    )
)

参数说明

  • window=3:滚动窗口覆盖同组内最近3条按时间排序的记录
  • min_periods=3:窗口内有效记录数小于3时,计算结果返回空值,对应输出中每组前2条记录的滚动值为空的规则
  • transform方法会将计算得到的滚动值直接对齐回原表的对应行,无需额外做表连接操作

结果校验

按照上述代码计算的结果与预期输出完全匹配:

  • electronic/phone 子类2021-01-03的滚动值为(10+12+3)/3≈8.3
  • electronic/phone 子类2021-01-04的滚动值为(12+3+20)/3≈11.6
  • electronic/computer 子类2021-01-03的滚动值为(15+12+20)/3≈15.7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 22:36:04