20

I understand how to calculate a rolling sum, std or average. Example:

df['MA10'] = df['Asset1'].rolling(10).mean()

But I don't understand the syntax to calculate the rolling correlation between two dataframes columns: df['Asset1'] and df['Asset2']

The documentation doesn't provide any example regarding the correlation.

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rolling.html

Any insights?

Thanks!

chrisaycock
  • 36,470
  • 14
  • 88
  • 125
Arthur Coimbra
  • 437
  • 1
  • 6
  • 16

2 Answers2

38

It's in there, even if hidden a bit:

df['Asset1'].rolling(10).corr(df['Asset2'])
chrisaycock
  • 36,470
  • 14
  • 88
  • 125
0

It's a way slower (~3x) and a bit longer, but in some cases more illustrative:

df[['Asset1','Asset2']].rolling(10).corr().unstack().iloc[:,0]

Multiple assets:

df[['Asset1','Asset2','Asset3']].rolling(100).corr().unstack().iloc[:,[0,1]]
VovaM
  • 342
  • 4
  • 8