我进行了分组:
df=pd.DataFrame({'grp':['a','a','b','b'],'value':[1,2,1,10]})
df.groupby('grp').agg({'value':['mean','median']})
并得到:
如何将其更改为可以操纵和访问的普通df?
答案 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
那么最好避免将列名重复使用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大熊猫,请使用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)