首页 > 解决方案 > 以正确的顺序按列展平分组

问题描述

import pandas as pd
import numpy as np
df=pd.DataFrame({"item":['a','a','a','b'],"item1":['b','d',np.nan,'c']})
df_grp=df.groupby("item").agg({'item1' : ['last','count']})
df_grp.columns = df_grp.columns.map('_'.join)
df_grp.reset_index()

这给了我

  item item1_last  item1_count
0    a          d            2
1    b          c            1

我想要的是

  item last_item1  count_item1
0    a          d            2
1    b          c            1

有没有更好的方法来实现这一目标?

标签: pandas

解决方案


您可以swaplevel在加入列之前使用。

df_grp.columns = df_grp.columns.swaplevel().map('_'.join)
#df_grp.columns = df_grp.swaplevel(axis=1).columns.map('_'.join)

df_grp.columns = df_grp.columns.swaplevel().map('_'.join)
print(df_grp.reset_index())

  item last_item1  count_item1
0    a          d            2
1    b          c            1

推荐阅读