Supponiamo che io sono un set di dati come il seguenteUn modo migliore per aggregare i dati e mantenere i nomi di struttura di tabelle e colonne con i panda
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
spesso mi voglio eseguire un'operazione groupby-aggregato dove ho gruppo da più colonne e applica più funzioni a una colonna. Inoltre, di solito non voglio una tabella multi-indexed a più livelli. Per fare ciò, mi stanno prendendo tre linee di codice che sembrano eccessive.
Per esempio
bg = df.groupby(['x1', 'x2']).agg({'x3': {'my_sum':np.sum, 'my_mean':np.mean}})
bg.columns = bg.columns.droplevel(0)
bg.reset_index()
Esiste un modo migliore? Per non gripe, ma io vengo da un/sfondo R data.table dove qualcosa di simile a questo è un bel uno-liner come
df[, list(my_sum=sum(x3), my_mean=mean(x3)), by=list(x1, x2)]
si può evitare la 'reset_index' chiamando' groupby' con 'as_index = False' – maxymoo
Sono d'accordo con te che il bias nei panda verso i multiindex è piuttosto fastidioso – maxymoo