pandas使用agg()函数分组聚合时避免生成多层列名的方法
问题原因
你调用agg()时传入的是列表包裹的函数[np.mean],pandas默认会将原列名、聚合函数名作为两层列索引返回,就会出现你遇到的双层列名问题。
解决方案
对应你需要的两种列名效果,分别有以下实现方式:
- 如果你希望最终列名是
mean(也就是你给出的预期输出样式),直接指定聚合列后调用聚合方法,再转为DataFrame指定列名即可:
# 写法1:用agg实现 df.groupby('Metropolitan area')['Population (2016 est.)[8]'].agg(np.mean).to_frame(name='mean') # 写法2:直接调用mean方法更简洁 df.groupby('Metropolitan area')['Population (2016 est.)[8]'].mean().to_frame(name='mean')
运行后输出和你给出的预期完全一致。
- 如果你希望最终保留原列名
Population (2016 est.)[8],指定聚合列后直接传聚合函数(不要套列表)即可:
df.groupby('Metropolitan area')['Population (2016 est.)[8]'].agg(np.mean).to_frame()
如果需要自定义列名,也可以用agg的命名字段写法:
df.groupby('Metropolitan area').agg( 人口均值=('Population (2016 est.)[8]', np.mean) )
内容的提问来源于stack exchange,提问作者Mauro
相关产品推荐
相关产品推荐

