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

Pandas如何计算精确3个月时间窗口的滚动中位数

实现方案

Pandas的rolling方法本身支持传入时间偏移量作为窗口参数,可以自动适配自然月的天数差异,同时保留每日的计算结果,适配你的需求。

前置要求

确保你的DataFrame的索引为datetime64类型(你的示例数据已经满足该条件)。

核心代码

import pandas as pd

# 若索引不是 datetime 类型先执行转换
df.index = pd.to_datetime(df.index)

# 计算3个月滚动中位数
df['ODPLYW_3M_median'] = df['ODPLYW'].rolling(
    window = pd.DateOffset(months=3),
    min_periods = 1 # 可自行调整最少需要的样本数,例如要求至少满2个月数据可改为60
).median()

方案说明

  • 自动适配不同月份的天数差异:pd.DateOffset(months=3)会自动根据当前日期计算前推3个自然月的窗口范围,比如11月1日对应的窗口是8月1日到11月1日,不受2月、大小月天数差异影响,比固定90天窗口更准确。
  • 每日输出对应结果:滚动计算逻辑会逐行生成每个日期对应的3个月窗口中位数,和原数据行数完全对齐,不会出现仅每3个月输出一个值的问题。

兼容低版本Pandas的备选方案

如果你的Pandas版本低于1.3,不支持直接传入DateOffset作为滚动窗口,可以用自定义apply实现,适合数据量不大的场景:

def calc_3m_median(current_date):
    start_date = current_date - pd.DateOffset(months=3)
    return df.loc[start_date:current_date, 'ODPLYW'].median()

df['ODPLYW_3M_median'] = df.index.to_series().apply(calc_3m_median)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:57:03