滚动相关熊猫

问题描述 投票:1回答:1

我有一个带时间序列的数据框。我想计算列之间的滚动相关性(周期= 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的帮助下(评论)。

还有另一种更快的方法吗? (即我想避免这个双循环。)

python pandas correlation
1个回答
1
投票

这一行:

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]])
© www.soinside.com 2019 - 2024. All rights reserved.