ich einen Datenrahmen haben, die etwa wie folgt aussieht:Pandas groupby Aggregat neue Spalten
A B C D
1 10 22 14
1 12 20 37
1 11 8 18
1 10 10 6
2 11 13 4
2 12 10 12
3 14 0 5
und eine Funktion, die etwa wie folgt aussieht (Hinweis: es ist tatsächlich etwas komplizierter zu tun, die nicht so leicht sein kann getrennt in drei unabhängige Anrufe, aber ich bin eine Vereinfachung für Klarheit):
def myfunc(g):
return min(g), mean(g), max(g)
ich möchte groupby
auf A
mit myfunc
verwenden, um eine Ausgabe zu erhalten auf Spalten 01.231.und C
(ohne Berücksichtigung D
) so etwas wie dieses:
B C
min mean max min mean max
A
1 10 10.75 12 8 15.0 22
2 11 11.50 12 10 11.5 13
3 14 14.00 14 0 0.0 0
Ich kann folgendes tun:
df2.groupby('A')[['B','C']].agg(
{
'min': lambda g: myfunc(g)[0],
'mean': lambda g: myfunc(g)[1],
'max': lambda g: myfunc(g)[2]
})
Aber damals abgesehen davon ist hässlich und ruft myfunc
mehrfach-I mit
Ich kann .swaplevel(axis=1)
verwenden, um die Spaltenstufen zu tauschen, aber selbst dann B
und C
sind in mehreren doppelten Spalten, und mit den mehreren Funktionsaufrufen fühlt es sich an, als würde man den falschen Baum anbellen.
HINWEIS getauscht zu bekommen: es ist tatsächlich etwas komplizierter zu tun, die nicht ohne weiteres in drei unabhängige Anrufe getrennt werden, aber ich bin Vereinfachung für Klarheit – Dan