滚动相关 pandas

Rolling correlation pandas

我有一个包含时间序列的数据框。 我想计算列之间的滚动相关性(周期 = 20)。

store_corr=[] #empty list to store the rolling correlation of each pairs
names=[] #empty list to store the column name
df=df.pct_change(periods=1).dropna(axis=0) #Prepate dataframe of time series

for i in range(0,len(df.columns)):
    for j in range(i,len(df.columns)):
        corr = df[df.columns[i]].rolling(20).corr(df[df.columns[j]])
        names.append('col '+str(i)+' -col '+str(j))
        store_corr.append(corr)

df_corr=pd.DataFrame(np.transpose(np.array(store_corr)),columns=names)

此解决方案有效并为我提供了滚动 correlation.This 解决方案是在 Austin Mackillop(评论)的帮助下完成的。

还有其他更快的方法吗? (即我想避免这个双重 for 循环。)

这一行:

corr=df.rolling(20).corr(df[df.columns[i]],df[df.columns[j]])

会产生错误,因为 corr 的第二个参数需要一个 Bool 但你传递了一个具有不明确真值的 DataFrame。您可以查看文档 here.

将滚动方法应用于您提供的第二行代码中的第一个 DataFrame 是否实现了您正在尝试做的事情?

corr = df[df.columns[i]].rolling(20).corr(df[df.columns[j]])