Comment obtenir une corrélation pour une série de pandas roulants et une série fixe?

Nov 19 2020

Je veux calculer corr entre deux séries. Je les ai définis comme:

s = pd.Series([1,2,3,4,5,6,7])
s2 = pd.Series([2,3,4])

ce que je veux, c'est une série de corrélations, que les valeurs soient le corr entre s.rolling (3) avec s2

Par exemple: le premier élément du résultat doit être [1,2,3] .corr (s2), le second doit être [2,3,4] .corr (s2), .....

J'ai lu l'exemple d'utilisation du roulement, mais je pense que la méthode interne roulement (3) .corr ne peut pas résoudre ce problème, existe-t-il de bonnes méthodes pour le faire?

Réponses

QuangHoang Nov 19 2020 at 21:59

Pouvez-vous faire une demande de roulement:

from scipy.stats import pearsonr
s.rolling(3).apply(lambda x: pearsonr(x,s2)[0])

Production:

0    NaN
1    NaN
2    1.0
3    1.0
4    1.0
5    1.0
6    1.0
dtype: float64
WBM Nov 19 2020 at 21:50

Pourquoi ne pas simplement utiliser une boucle for?

import pandas as pd
s = pd.Series([1,2,3,4,5,6,7])
s2 = pd.Series([2,3,4])
window_size = len(s2)

output = []
for i in range(len(s)-window_size):
    output.append(s[i:window_size+i].corr(s2))