Wie erhalte ich eine Korrelation für eine rollende Pandaserie und eine feste Serie?

Nov 19 2020

Ich möchte die Korrelation zwischen zwei Serien berechnen. Ich habe sie definiert als:

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

was ich will ist eine korrelationsreihe, dass die werte die korr zwischen s.rolling (3) mit s2 sind

Zum Beispiel: Das erste Element des Ergebnisses sollte [1,2,3] .corr (s2) sein, das zweite sollte [2,3,4] .corr (s2) sein, .....

Ich habe das Verwendungsbeispiel des Rollens gelesen, aber ich denke, es ist eine innere Methode des Rollens (3).

Antworten

QuangHoang Nov 19 2020 at 21:59

Kannst du eine rollierende Bewerbung machen:

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

Ausgabe:

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

Warum nicht einfach eine for-Schleife verwenden?

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