简体   繁体   中英

Rolling correlation pandas

I have a dataframe with time series. I'd like to compute the rolling correlation (periods=20) between columns.

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)

This solution is working and gives me the rolling correlation.This solution is with the help of Austin Mackillop (comments).

Is there another faster way? (Ie I want to avoid this double for loop.)

This line:

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

will produce an error because the second argument of corr expects a Bool but you passed a DataFrame which has an ambiguous truth value. You can view the docs here .

Does applying the rolling method to the first DataFrame in the second line of code that you provided achieve what you are trying to do?

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM