【问题标题】:Merge MultiIndex columns together into 1 level [duplicate]将 MultiIndex 列合并为 1 级 [重复]
【发布时间】:2018-02-03 07:45:06
【问题描述】:

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

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 dataframe multi-index


    【解决方案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
    

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

    【讨论】:

    • 谢谢。这似乎是最不让人头疼的版本。
    • 我觉得这个问题现在是链接问题的欺骗,我们应该标记为欺骗吗?
    • @EdChum 是的,我已经看到了,但它太冗长了,以至于我的眼睛都呆滞了。我认为这会很好,因为它是对同一问题的更简单的表述。我把它留给你,驻地熊猫金徽章:)
    • 我想我会欺骗锤子这个,注意在你的情况下strip是多余的
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 2020-07-11
      • 2023-03-14
      • 2016-04-04
      • 2012-12-20
      相关资源
      最近更新 更多