从pandas multi index中的单个列中删除一个级别

时间:2018-02-23 18:06:48

标签: 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

假设' a'和' b' col1是相同的。我想放弃整个级别的字母' (' a',' b'),但仅限于col1。我不想使用drop()来放弃' a'或者' b',如Dropping a single (sub-) column from a MultiIndex

我想要从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

1 个答案:

答案 0 :(得分:0)

你走了。这是一个非常繁重的工作,但我不相信大熊猫自然支持多索引这种功能。我打破了所有步骤,更具体地展示了我如何得到结果,但你可以轻松地简化这一步。

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