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

pandas滚动相关性:窗口设为'1d'与1为何返回不同结果?

为什么pandas rolling窗口用'1d'和1会得到不同的corr结果?

先看你的数据和代码:

import pandas as pd
df = pd.DataFrame({'x':(1,2), 'y':(2,3)}, index=[pd.Timestamp('20180101'), pd.Timestamp('20180102')])

# 两种不同的rolling写法
df.rolling(window='1d').corr()
df.rolling(window=1).corr()

你觉得“窗口大小都是1”应该结果一致,但其实这两种窗口的定义逻辑天差地别:

1. 整数窗口window=1:按观测行数取窗口

这个窗口的意思是:每个窗口只包含当前行这1条数据。但计算相关系数的前提是至少有2个样本(单个样本的协方差为0,不同列之间的相关系数无法计算),所以运行结果里,只有列自身和自身的相关系数是1,不同列之间全是NaN:

x   y
2018-01-01 x  1.0 NaN
           y  NaN 1.0
2018-01-02 x  1.0 NaN
           y  NaN 1.0

2. 时间偏移窗口window='1d':按时间范围取窗口

这个窗口的意思是:每个窗口包含当前时间点往前1天内的所有观测数据。看你的索引:

  • 2018-01-01的窗口范围是当天,只有自己1条数据,结果和上面一致;
  • 2018-01-02的窗口范围是「2018-01-01 00:00:00」到「2018-01-02 00:00:00」,这刚好包含了前一行的数据,窗口里有2个样本!

两个样本(1,2)和(2,3)是完全正相关的,所以第二行的x和y相关系数会是1,最终结果:

x   y
2018-01-01 x  1.0 NaN
           y  NaN 1.0
2018-01-02 x  1.0 1.0
           y  1.0 1.0

核心总结

  • 整数窗口:固定取N个连续的行,和时间无关;
  • 时间偏移窗口:取当前时间往前指定范围内的所有行,和行数无关。

这就是为什么看起来“窗口大小都是1”,结果却完全不同的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:03:46