将 MultiIndex 列合并为 1 级

Merge MultiIndex columns together into 1 level

这是另一个问题的一些数据:

date       type       value
1/1/2016   a          1
1/1/2016   b          2
1/1/2016   a          1
1/1/2016   b          4
1/2/2016   a          1
1/2/2016   b          1

运行这行代码:

x = df.groupby(['date', 'type']).value.agg(['sum', 'max']).unstack()

x 应该是这样的:

         sum    max   
type       a  b   a  b
date                  
1/1/2016   2  6   1  4
1/2/2016   1  1   1  1

我想合并上层和下层的列得到这个:

           sum_a  sum_b   max_a  max_b
date                  
1/1/2016   2       6        1       4
1/2/2016   1       1        1       1

有没有简单的方法来做到这一点?

这里有关于这个的讨论:

Python Pandas - How to flatten a hierarchical index in columns

共识似乎是:

x.columns = ['_'.join(col) for col in x.columns.values]
print(x)
          sum_a  sum_b  max_a  max_b
date                                
1/1/2016      2      6      1      4
1/2/2016      1      1      1      1

如果有内置方法就好了,但好像没有。

与上述使用 zip 的解决方案非常相似:

x.columns = [x + '_' + i for x, i in zip(x.columns.get_level_values(0), x.columns.get_level_values(1))]
x
          sum_a  sum_b  max_a  max_b
date                                
1/1/2016      2      6      1      4
1/2/2016      1      1      1      1