Немного измените свой код - добавьте столбец для агрегирования после groupby
и передайте список функций:
df1 = df.groupby('grp')['value'].agg(['mean','median'])
print (df1)
mean median
grp
a 1.5 1.5
b 5.5 5.5
Другая идея - удалить первый уровень MultiIndex
, но если больше столбцоввозможно получить дублированные имена столбцов:
df1 = df.groupby('grp').agg({'value':['mean','median']})
df1.columns = df1.columns.droplevel(0)
print (df1)
mean median
grp
a 1.5 1.5
b 5.5 5.5
Тогда лучше во избежание дублирования имен столбцов использовать map
с join
:
df1 = df.groupby('grp').agg({'value':['mean','median']})
df1.columns = df1.columns.map('_'.join)
print (df1)
value_mean value_median
grp
a 1.5 1.5
b 5.5 5.5
или для панд 0.25 использовать именованная агрегация :
df2 = df.groupby("grp").agg(a=pd.NamedAgg(column='value', aggfunc='mean'),
b=pd.NamedAgg(column='value', aggfunc='median'))
print (df2)
a b
grp
a 1.5 1.5
b 5.5 5.5