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

设置center=True后Pandas Rolling mean未按预期显示缺失值求助

居中年度滚动窗口计算的问题分析与解决

问题背景

需要对月度时间序列计算居中年度滚动均值,要求首尾因窗口无法覆盖完整12个月数据时返回NaN,预期效果如下:

foo
month               
2016-08-01       NaN
2016-09-01       NaN
2016-10-01       NaN
2016-11-01       NaN
2016-12-01       NaN
2017-01-01 =mean(2016-08-01 to 2017-07-01)
2017-02-01 =mean(2016-09-01 to 2017-08-01)

测试数据前20行:

test.head(20)
Out[39]: 
                 foo
month               
2016-08-01 -0.105854
2016-09-01 -0.120718
2016-10-01 -0.129150
2016-11-01 -0.114559
2016-12-01 -0.135669
2017-01-01 -0.140636
2017-02-01 -0.094412
2017-03-01 -0.139349
2017-04-01 -0.099603
2017-05-01 -0.076229
2017-06-01 -0.098049
2017-07-01 -0.108535
2017-08-01 -0.037598
2017-09-01 -0.181011
2017-10-01 -0.121715
2017-11-01 -0.089486
2017-12-01 -0.132886
2018-01-01 -0.063460
2018-02-01 -0.111066
2018-03-01 -0.130275

执行test.rolling('365D', min_periods=3, center=True).mean()后,首尾未返回预期的NaN,结果不符合需求。

原因分析

  1. 时间偏移窗口逻辑:rolling('365D', center=True)会为每个时间点生成一个以该点为中心、前后各约182天的时间范围窗口。对于2016-08-01这类早期数据,窗口内包含后续已存在的5个数据(2016-08至2016-12),满足min_periods=3的要求,因此直接计算了均值,而非返回NaN。
  2. 需求匹配偏差:核心需求是仅当窗口覆盖完整12个月数据时才计算均值,但当前min_periods=3的设置允许窗口内有3个及以上数据就返回结果;同时时间偏移窗口(365D)无法严格匹配“12个月度周期”(不同月份天数不同,365D可能包含11或13个自然月)。

解决方案

针对月度规则时间序列,推荐使用固定周期窗口替代时间偏移窗口,同时设置min_periods=12确保只有完整12个月数据时才计算:

# 居中滚动12个月均值,要求窗口内必须有12个完整数据
test_rolling = test.rolling(window=12, center=True, min_periods=12).mean()

执行后结果示例:

foo
month               
2016-08-01       NaN
2016-09-01       NaN
2016-10-01       NaN
2016-11-01       NaN
2016-12-01       NaN
2017-01-01       NaN  # 窗口仅包含6个数据,不足12个
2017-02-01       NaN  # 窗口包含7个数据,不足12个
...
2017-07-01 -0.112138  # 窗口覆盖2016-08至2017-07,共12个数据
2017-08-01 -0.111067  # 窗口覆盖2016-09至2017-08,共12个数据
...

若坚持使用时间偏移窗口,需将min_periods设为12,确保窗口内至少包含12个月度数据:

# 时间偏移窗口版本,要求窗口内至少12个数据
test_rolling = test.rolling('365D', center=True, min_periods=12).mean()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:22:19