Angenommen, ich habe einen Datensatz wie folgenEine bessere Möglichkeit, Daten aggregieren und Tabellenstruktur und Spaltennamen mit Pandas
df = pd.DataFrame({'x1':['a','a','b','b'], 'x2':[True, True, True, False], 'x3':[1,1,1,1]})
df
x1 x2 x3
0 a True 1
1 a True 1
2 b True 1
3 b False 1
Ich mag oft hält einen groupby-Aggregat Betrieb, wo ich Gruppe von mehreren Spalten durchzuführen und Wenden Sie mehrere Funktionen auf eine Spalte an. Außerdem möchte ich normalerweise keine multi-indexierte, mehrstufige Tabelle. Um dies zu erreichen, brauche ich drei Zeilen Code, die übertrieben erscheinen.
Zum Beispiel
bg = df.groupby(['x1', 'x2']).agg({'x3': {'my_sum':np.sum, 'my_mean':np.mean}})
bg.columns = bg.columns.droplevel(0)
bg.reset_index()
Gibt es einen besseren Weg? Nicht zu meckern, aber ich komme aus einem R/data.table Hintergrund, wo so etwas wie dieses ist eine nette Einzeiler wie
df[, list(my_sum=sum(x3), my_mean=mean(x3)), by=list(x1, x2)]
Sie das vermeiden können 'reset_index' durch Aufruf von' groupby' mit 'as_index = False' – maxymoo
Ich stimme dir zu, dass die Voreingenommenheit in Pandas in Richtung multi-indexes ziemlich nervig ist – maxymoo