我正在尝试使用时间偏移量作为滚动窗口来计算pandas
(0.21.1)数据帧的两列之间的滚动相关性。
使用int
window = n,我得到了预期的行为-第一个非nan条目,即第n行,是使用前n行计算的相关性;下一行是使用1:n + 1行的相关性,等等。
但是,使用pd.Timedelta
窗口时,我得到了完全不同的结果-第n行是相同的,但是第n + 1行是使用前n + 1行计算的相关性-就像窗口的值无关紧要,即使我有一个DateTimeIndex
。
示例:
df = pd.DataFrame(index=pd.DatetimeIndex(start='2019-01-01',freq='1min',periods=100),columns=['a','b'])
df['a']=range(100)
df['b']=[100+0.4*x + 17 * np.random.normal(0,1,1)[0] for x in range(100)]
基于第1至11行的“手动”相关性计算:
print(((df-df.mean())/df.std()).iloc[1:11].corr())
a 1.000000
b 0.277464
Name: 2019-01-01 00:10:00, dtype: float64
使用int
窗口的相关性:
print(df.rolling(10)['a'].corr(df.rolling(10)['b']).iloc[10])
a b
a 1.000000 0.277464
b 0.277464 1.000000
使用偏移量窗口的相关性(应与timedelta相同,两者均无效):
print(df.rolling('10min')['a'].corr(df.rolling('10min')['b']).iloc[10])
a 1.000000
b 0.175995
Name: 2019-01-01 00:10:00, dtype: float64
我什么都不来?