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

如何在Pandas中按分组为多列计算7日滚动平均值?

Pandas按分组计算多列7日滚动平均值

我有一个包含多列的Pandas数据集,结构如下:

code    country_region  date        retail  transit work    res
CA      Canada          2020-02-15   4       3      1        0
CA      Canada          2020-02-16   13      4      0       -2
CA      Canada          2020-02-17  -12     -28    -52       11
CA      Canada          2020-02-18  -1      -1     -1        1
CA      Canada          2020-02-19   1       0      0        0
CA      Canada          2020-02-20   6      -1      1        0
CA      Canada          2020-02-21   2      -1     -3        1
CA      Canada          2020-02-22   8       6      6       -1
CA      Canada          2020-02-23   7      -5      5        6
...

US      United States   2020-02-15   6       3      1        0
US      United States   2020-02-16   13      4      0       -2
...

需求是:按code和country_region分组,为每个分组内的retail、transit、work、res数值列计算7日滚动平均值(已确认数据无缺失日期)。由于数据量极大,不能用Excel的方式处理,需要非循环的Python实现。

目前已将日期列转换为日期类型,代码如下:

df['date_fmt'] = pd.to_datetime(df['date']).apply(lambda t: datetime.datetime.fromisoformat(str(t)))

优化日期转换代码

pd.to_datetime()已经会返回Pandas的datetime对象,无需额外用datetime.datetime.fromisoformat()转换,简化代码:

df['date_fmt'] = pd.to_datetime(df['date'])

核心实现:分组+滚动平均

利用groupby()结合rolling()可以高效完成需求,无需循环。由于数据无缺失日期,每个分组内的日期是连续的,直接指定窗口大小为7即可:

# 定义需要计算滚动平均的数值列
numeric_cols = ['retail', 'transit', 'work', 'res']

# 按code和country_region分组,对指定列计算7日滚动平均
rolling_df = df.groupby(['code', 'country_region'])[numeric_cols].rolling(window=7, min_periods=1).mean().reset_index()

# 重命名滚动平均列,方便区分原始列
rolling_df.columns = ['code', 'country_region', 'level_2'] + [f'{col}_7d_avg' for col in numeric_cols]

# 合并回原始数据集(可选,根据需求决定)
final_df = df.merge(rolling_df.drop('level_2', axis=1), on=['code', 'country_region'])

参数说明:

  • window=7:因为数据是每日连续无缺失的,窗口大小设为7代表最近7天(含当前行)
  • min_periods=1:允许窗口不足7行时计算平均值(比如前6行会用现有数据计算平均);如果要求必须满7天才能计算,可去掉该参数(默认min_periods=window)
  • reset_index():将分组后的多层索引展开,方便后续合并或单独使用

内容的提问来源于stack exchange,提问作者C. Cooney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:05:36