Python 从多索引中的单个列中删除一个级别

Python 从多索引中的单个列中删除一个级别,python,pandas,indexing,multi-index,Python,Pandas,Indexing,Multi Index,我有以下数据帧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中删

我有以下数据帧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中删除。我不想使用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

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

    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:]]