将多级索引列合并为一个级别

15

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

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

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

2个回答

16

这里有相关讨论:

Python Pandas - 如何展开带有层次结构的索引列

而共识似乎是:

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

如果有内置方法的话会很好,但似乎没有。


1
谢谢。这似乎是最不麻烦的版本。 - cs95
我有点觉得这个问题现在是链接问题的重复,我们应该标记为重复吗? - EdChum
@EdChum 是的,我已经看到了那个,但是它太冗长了,让我感到有些无聊。我认为这个更好,因为它是同样问题的一个更简单的表述。我把它留给你,作为熊猫金徽章的专家 :) - cs95
1
我想我会把这个复制并粘贴一下,注意在你的情况下 strip 是多余的。 - EdChum

2

使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接