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

Pandas逐行计算对应日期过去3个月的数值列均值方法

实现方法

核心逻辑

使用pandas自带的时间滚动窗口功能实现需求,无需手动构造广播矩阵,步骤如下:

  1. 转换日期格式:将int64类型的Date列转换为datetime类型,为时间窗口计算做准备
  2. 数据排序:按日期升序排列,保证时间窗口计算的正确性
  3. 滚动均值计算:设置3个月的时间窗口,仅统计当前日期之前的数值计算均值
  4. 可选:删除包含NaN的结果行

完整可运行代码

import pandas as pd

# 构造示例数据,你可以替换为自己的DataFrame
df = pd.DataFrame({
    'Date': [20010425, 20010112, 20010308, 20010527, 20010620],
    'Value': [1, 4, 3, 5, 2]
})

# 1. 转换日期格式
df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d')
# 2. 按日期排序
df = df.sort_values('Date', ignore_index=True)
# 3. 设置日期为索引,用于时间滚动窗口计算
df = df.set_index('Date')

# 4. 计算过去3个月的均值,closed='left'表示不包含当前行的Value
# 若需要固定90天窗口,将window参数改为'90D'即可
df['Mean_Value_past_3_months'] = df['Value'].rolling(
    window='3ME',
    closed='left'
).mean()

# 5. 恢复Date为普通列
df = df.reset_index()

# 可选:删除包含NaN的行
df = df.dropna(subset=['Mean_Value_past_3_months'], ignore_index=True)

print(df)

参数说明

  • window='3ME':表示窗口长度为3个自然日历月,会自动适配不同月份的天数差异,若你需要固定90天的统计范围,替换为window='90D'即可
  • closed='left':保证计算均值时仅统计当前日期之前的数值,不会把当前行的Value算入结果,符合你的需求
  • mean()方法默认自动忽略NaN值,无需额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:45:03