我有一个带时间序列的数据框。我想计算列之间的滚动相关性(周期= 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)
这个解决方案正在运行,并给我滚动的相关性。这个解决方案是在Austin Mackillop的帮助下(评论)。
还有另一种更快的方法吗? (即我想避免这个双循环。)
这一行:
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]])