我有一个像这样的熊猫数据框:

index col1   col2   col3   col4   col5
0     a      c      1      2      f
1     a      c      1      2      f
2     a      d      1      2      f
3     b      d      1      2      g
4     b      e      1      2      g
5     b      e      1      2      g


如果我按两列分组,如下所示:

df.groupby(['col1', 'col2']).agg({'col3':'sum','col4':'sum'})


我得到:

           col3  col4
col1 col2
a    c        2     4
     d        1     2
b    d        1     2
     e        2     4


是否可以将其转换为:

col1 c_col3 d_col3 c_col4 d_col4 e_col3 e_col4
a    2      1      4      2      Nan    Nan
b    Nan    1      Nan    2      2      4


以高效的方式col1是索引?

最佳答案

在列中为unstack添加MultiIndex,因此必须展平:

df1 = df.groupby(['col1', 'col2']).agg({'col3':'sum','col4':'sum'}).unstack()
#python 3.6+
df1.columns = [f'{j}_{i}' for i, j in df1.columns]
#python bellow
#df1.columns = ['{}_{}'.format(j, i) for i, j in df1.columns]
print (df1)
      c_col3  d_col3  e_col3  c_col4  d_col4  e_col4
col1
a        2.0     1.0     NaN     4.0     2.0     NaN
b        NaN     1.0     2.0     NaN     2.0     4.0

10-08 05:38