删除多索引数据框熊猫的指定列

时间:2020-04-20 11:50:14

标签: python pandas

我在删除多索引数据框的指定列时遇到问题。

假设我们有这个df

df.columns
MultiIndex([('Status', 'Group A', 'PASS'),
            ('Status', 'Group A', 'Not PASS'),
            ('Status', 'Group A', 'Absent'),
            ('Status', 'Group B', 'PASS'),
            ('Status', 'Group B', 'Not PASS'),
            ('Status', 'Group B', 'Absent'),
            ('Status', 'Group B', nan),
            ('Status', 'Group C', 'PASS'),
            ('Status', 'Group C', 'Not PASS'),
            ('Status', 'Group C', 'Absent')],
           names=[None, 'Group', 'Status'])

我们想基于df创建一个新的数据框,并且只想提取['Not Pass', 'Absent']

有没有办法切片/删除数据帧上不必要的列?

1 个答案:

答案 0 :(得分:0)

slicing用于摘要级别,:中的第一:表示所有行,第一,第二idx表示第一,第二级别和列表中的所有值用于过滤:

idx = pd.IndexSlice
df = df.loc[:, idx[:, :, ['Not Pass', 'Absent']]]

替代:

df = df.loc[:, df.columns.get_level_values(2).isin(['Not Pass', 'Absent'])]

如果要删除列,只需用~取反掩码:

df = df.loc[:, ~df.columns.get_level_values(2).isin(['Not Pass', 'Absent'])]