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

如何为pandas数据框中每个唯一城市单独计算value列的移动平均线

Pandas按城市分组计算单列移动平均实现方案

前置准备

计算前必须先对DataFrame按「城市+日期」做升序排序,保证每个城市的数据是按时间先后排列的,否则移动平均结果会出错:

# 排序并重置索引
df = df.sort_values(by=["city", "date"]).reset_index(drop=True)

核心实现代码

你需要的分组滚动计算逻辑可以直接通过groupby+rolling实现,以下是两种常用写法,效果一致:

写法1:用transform直接对齐原索引

适合快速赋值,不需要额外处理索引:

# 新增ma_3列存储每个城市的3期移动平均值
df["ma_3"] = df.groupby("city")["value"].transform(lambda x: x.rolling(3).mean())

写法2:直接对分组后的值做滚动计算

适合需要自定义滚动参数的场景,计算后重置分组索引即可和原DataFrame对齐:

# min_periods=1表示不足3期时按现有数据计算,避免前2行出现空值
df["ma_3"] = df.groupby("city")["value"].rolling(3, min_periods=1).mean().reset_index(level=0, drop=True)

常用参数说明

  • 调整窗口大小:修改rolling()的第一个参数即可,比如要算7天移动平均就改成rolling(7)
  • 中心移动平均:需要计算当期前后各n期的平均值时,添加参数center=True
  • 缺失值处理:可以先通过df["value"] = df["value"].fillna(0)填充缺失值后再做滚动计算

结果验证

计算完成后可以单独筛选单个城市的数据做校验,确认移动平均没有混入其他城市的数值:

print(df[df["city"] == "saopaulo"].head())

内容的提问来源于stack exchange,提问作者Marcos Vinícius Petri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:18:03