将groupby维从2中的熊猫更改为1

时间:2019-10-15 12:14:42

标签: pandas pandas-groupby

我进行了分组:

df=pd.DataFrame({'grp':['a','a','b','b'],'value':[1,2,1,10]})

df.groupby('grp').agg({'value':['mean','median']})

并得到:

enter image description here

如何将其更改为可以操纵和访问的普通df?

2 个答案:

答案 0 :(得分:1)

稍微更改代码-在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

那么最好避免将列名重复使用mapjoin

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大熊猫,请使用named aggregation

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

答案 1 :(得分:0)

您可以像这样简单地删除列的级别并重置DataFrame的索引:

df=pd.DataFrame({'grp':['a','a','b','b'],'value':[1,2,1,10]})

df1 = df.groupby('grp').agg({'value':['mean','median']})
df1.columns = df1.columns.droplevel(0)
df1.reset_index()

此外,如果您想要合并的列,则可以:

df1.columns = df1.columns.map('_'.join)

代替:

df1.columns = df1.columns.droplevel(0)