Ich versuche, die Spaltenwerte eines Pandas Datenrahmens "rekursiv" zu berechnen.Berechne DataFrame Werte rekursiv
Angenommen, es gibt Daten für zwei verschiedene Tage mit jeweils 10 Beobachtungen und Sie möchten eine Variable r berechnen, in der nur der erste Wert von r angegeben ist (an jedem Tag) und Sie die verbleibenden 2 * 9 Einträge berechnen möchten jeder nachfolgende Wert hängt von der vorherigen Eingabe von r und einer zusätzlichen 'zeitgleichen' Variablen 'x' ab.
Das erste Problem ist, dass ich die Berechnungen für jeden Tag ausführen möchten individuell dh würde Ich mag die pandas.groupby()
Funktion für alle meine Berechnungen verwenden ... aber wenn ich versuche, die Daten der Teilmenge und verwenden Sie die shift(1)
Funktion, ich nur bekommen "NaN" Einträge
data.groupby(data.index)['r'] = ((1+data.groupby(data.index)['x']*0.25) * (1+data.groupby(data.index)['r'].shift(1)))
für meinen zweiten Ansatz ich eine for-Schleife verwendet, um den Index zu iterieren (Termine):
for i in range(2,21):
data[data['rank'] == i]['r'] = ((1+data[data['rank'] == i]['x']*0.25) * (1+data[data['rank'] == i]['r'].shift(1))
aber immer noch, das funktioniert nicht für mich. Gibt es eine Möglichkeit, eine solche Berechnung auf DataFrames durchzuführen? Vielleicht etwas wie Rollen anwenden?
Daten:
df = pd.DataFrame({
'rank' : [1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10],
'x' : [0.00275,0.00285,0.0031,0.0036,0.0043,0.0052,0.0063,0.00755,0.00895,0.0105,0.0027,0.00285,0.0031,0.00355,0.00425,0.0051,0.00615,0.00735,0.00875,0.0103],
'r' : [0.00158,'NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN',0.001485,'NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN']
},index=['2014-01-02', '2014-01-02', '2014-01-02', '2014-01-02',
'2014-01-02', '2014-01-02', '2014-01-02', '2014-01-02',
'2014-01-02', '2014-01-02', '2014-01-03', '2014-01-03',
'2014-01-03', '2014-01-03', '2014-01-03', '2014-01-03',
'2014-01-03', '2014-01-03', '2014-01-03', '2014-01-03'])
Es gibt eine Reihe von Fragen zu diesem Thema, aber es ist Derzeit gibt es keine schnelle Möglichkeit, diese Art von Rekursionsrelationsberechnungen in Pandas durchzuführen. Sie müssen Schleife. Es gibt [ein offenes Problem] (https://github.com/pandas-dev/pandas/issues/4567) darüber. – BrenBarn