Verwenden von rolling_apply mit einer Funktion, für die 2 Argumente in Pandas @ erforderlich si
Ich versuche, rollapply mit einer Formel zu verwenden, die 2 Argumente erfordert. Meines Wissens ist die einzige Möglichkeit (es sei denn, Sie erstellen die Formel von Grund auf neu), die Kendall-Tau-Korrelation zu berechnen, einschließlich der Standard-Krawattenkorrektur:
>>> import scipy
>>> x = [5.05, 6.75, 3.21, 2.66]
>>> y = [1.65, 26.5, -5.93, 7.96]
>>> z = [1.65, 2.64, 2.64, 6.95]
>>> print scipy.stats.stats.kendalltau(x, y)[0]
0.333333333333
Ich bin mir auch des Problems mit rollapply und zwei Argumenten bewusst, wie hier dokumentiert:
Verwandte Frage 1Github Issue Verwandte Frage 2Noch immerhin habe ich Probleme, einen Weg zu finden, um die Kendalltau-Berechnung für einen Datenrahmen mit mehreren Spalten auf fortlaufender Basis durchzuführen.
Mein Datenframe ist so etwas wie das
A = pd.DataFrame([[1, 5, 1], [2, 4, 1], [3, 3, 1], [4, 2, 1], [5, 1, 1]],
columns=['A', 'B', 'C'], index = [1, 2, 3, 4, 5])
Versuche, eine Funktion zu erstellen, die dies tut
In [1]:function(A, 3) # A is df, 3 is the rolling window
Out[2]:
A B C AB AC BC
1 1 5 2 NaN NaN NaN
2 2 4 4 NaN NaN NaN
3 3 3 1 -0.99 -0.33 0.33
4 4 2 2 -0.99 -0.33 0.33
5 5 1 4 -0.99 0.99 -0.99
In einem sehr vorläufigen Ansatz kam mir die Idee, die Funktion folgendermaßen zu definieren:
def tau1(x):
y = np.array(A['A']) # keep one column fix and run it in the other two
tau, p_value = sp.stats.kendalltau(x, y)
return tau
A['AB'] = pd.rolling_apply(A['B'], 3, lambda x: tau1(x))
atürlich hat es nicht funktioniert. Ich habe
ValueError: all keys need to be the same shape
ch verstehe, ist kein triviales Problem. Ich freue mich über jede Eingabe.