Die Dokumente zeigen, wie Sie mehrere Funktionen gleichzeitig auf ein Groupby-Objekt anwenden, indem Sie ein Diktat mit den Namen der Ausgabespalten als Schlüssel verwenden:
In [563]: grouped['D'].agg({'result1' : np.sum,
.....: 'result2' : np.mean})
.....:
Out[563]:
result2 result1
A
bar -0.579846 -1.739537
foo -0.280588 -1.402938
Dies funktioniert jedoch nur bei einem Series groupby-Objekt. Und wenn ein Diktat auf ähnliche Weise an eine Gruppe von DataFrame übergeben wird, erwartet es, dass die Schlüssel die Spaltennamen sind, auf die die Funktion angewendet wird.
Ich möchte mehrere Funktionen auf mehrere Spalten anwenden (bestimmte Spalten werden jedoch mehrmals bearbeitet). Außerdem hängen einige Funktionen auf anderen Spalten in dem groupby Objekt (wie SUMIF Funktionen). Meine derzeitige Lösung besteht darin, Spalte für Spalte zu gehen und so etwas wie den obigen Code auszuführen, wobei Lambdas für Funktionen verwendet werden, die von anderen Zeilen abhängen. Dies dauert jedoch lange (ich denke, es dauert lange, bis ein Groupby-Objekt durchlaufen ist). Ich muss es so ändern, dass ich das gesamte groupby-Objekt in einem einzigen Lauf durchlaufe, aber ich frage mich, ob es in Pandas eine eingebaute Methode gibt, um dies etwas sauber zu machen.
Zum Beispiel habe ich so etwas versucht
grouped.agg({'C_sum' : lambda x: x['C'].sum(),
'C_std': lambda x: x['C'].std(),
'D_sum' : lambda x: x['D'].sum()},
'D_sumifC3': lambda x: x['D'][x['C'] == 3].sum(), ...)
aber wie erwartet bekomme ich einen KeyError (da die Schlüssel eine Spalte sein müssen, wenn agg
sie von einem DataFrame aufgerufen werden).
Gibt es eine eingebaute Möglichkeit, das zu tun, was ich tun möchte, oder die Möglichkeit, dass diese Funktionalität hinzugefügt wird, oder muss ich die Gruppe nur manuell durchlaufen?
Vielen Dank