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

2024-06-24 13:00:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧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”是相同的。我想删除整个级别的“letters”('a','b'),但只从col1中删除。我不想使用drop()删除'a'或'b',如Dropping a single (sub-) column from a MultiIndex。你知道吗

我想从col1中删除level,以获得

    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

Tags: col2col3col1x1x2x3z11y12
1条回答
网友
1楼 · 发布于 2024-06-24 13:00:11

给你。这是一个相当繁杂的工作,但我不相信熊猫自然支持这种功能与多索引。我分解了所有的步骤,以更具体地说明我是如何得到结果的,但是您可以更容易地简化这个过程。你知道吗

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

相关问题 更多 >