Ich habe ein Datenframe, für das ich eine Reihe von Metriken nach bestimmten Spalten im Datenrahmen gruppieren müssen. Ich würde das gerne mit einer Schleife machen, aber ich kann mir nicht vorstellen, wie (wenn es einen richtigen Weg gibt).mit integrierten Pandas groupby Metriken aus einer Liste der genannten Metriken
Also, was ich versuche zu tun, im Grunde (semi-Pseudo-Code, dies nicht aus offensichtlichen Gründen nicht ausgeführt werden):
df = pd.DataFrame({'ID': ['A', 'B', 'A', 'C', 'B', 'C', 'A'],
'Score': range(7)})
group = df.groupby('ID')
for stat in ['mean', 'min', 'max']:
group.stat()
Das kann ich, wenn ich numpy
und getattr
verwenden, um die Arbeit. D.h .:
for stat in ['mean', 'min', 'max']:
df.groupby('ID').apply(getattr(np, stat))
Das Problem dabei ist, dass es die eingebaute in .mean()
als die Verwendung von usw. Pandas bietet (zumindest für die Größe, den Datenrahmen arbeite ich mit) deutlich langsamer ist.
Gibt es einen geeigneteren Weg, dies zu erreichen?
Sie sollten Ihre Daten nur einmal gruppieren. Nach der Gruppierung können Sie mehrere Aggregationen anwenden (Summe, Minimum, Maximum usw.). – Alexander
Richtig, das war mein Fehler beim Erstellen des Spielzeug-Beispiels - ich habe die Gruppe außerhalb meiner Schleife in meinem tatsächlichen Anwendungsfall. Die Antwort von MaxU schlägt vor, agg zu verwenden, aber das führt zu einem etwas komplizierteren Ergebnis (wie ich im Kommentar unten seine Antwort anzeige): – user3014097