【问题标题】:Drop a level from a single column in pandas multi index从 pandas 多索引中的单个列中删除一个级别
【发布时间】:2018-08-03 20:43:37
【问题描述】:

我有以下数据框 df

    col1        col2        col3
    a     b     a     b     a     b       
1   x1    x1   y11    y12   z11   z12  
2   x2    x2   y21    y22   z21   z22
3   x3    x3   y31    y32   z31   z32

假设 col1 的“a”和“b”相同。我想删除整个级别的“字母”(“a”、“b”),但只能从 col1 中删除。我不想像Dropping a single (sub-) column from a MultiIndex 那样使用 drop() 来删除“a”或“b”。

我想改为从 col1 中删除级别,以获得

    col1        col2        col3
                a     b     a     b       
1   x1         y11    y12   z11   z12  
2   x2         y21    y22   z21   z22
3   x3         y31    y32   z31   z32

【问题讨论】:

    标签: python pandas indexing multi-index


    【解决方案1】:

    给你。这是一个相当复杂的工作,但我不相信 pandas 自然支持这种多索引功能。我分解了所有步骤,以更具体地展示我是如何得到结果的,但您可以轻松地进一步简化。

        import pandas as pd
        import numpy as np
    
        arrays = [np.array(['col1', 'col1', 'col2', 'col2', 'col3', 'col3']),
                  np.array(['a', 'b', 'a', 'b', 'a', 'b'])]
        df = pd.DataFrame(np.random.randn(3, 6), columns=arrays)
    
        df_part = df[df.columns[:2]]
        df_part2 = df[df.columns[2:]]
    
        df_part.columns.set_levels(['a', ''], level=1, inplace=True)
        new_df = pd.concat([df_part, df_part2], axis=1)
        result = new_df[new_df.columns[1:]]
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2016-12-01
      • 2014-09-27
      • 2022-01-26
      • 2019-12-30
      • 2019-01-16
      相关资源
      最近更新 更多