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))