使用pandas.IndexSlice删除具有MultiIndex的行

时间:2018-09-10 11:48:34

标签: python pandas

最近我想使用pd.IndexSlice删除一些行,但是意识到它们不能一起工作。

这是一个例子:

data = [('animal', 'cat', 'black', 1),
         ('animal', 'mouse', 'grey', 5),
         ('plant', 'houseplant', 'green', 11)]

df = pd.DataFrame(data, columns=['type','species', 'colour', 'amount'])

df = df.set_index(['type','species','colour'])

idx = pd.IndexSlice

ind = idx[:,'mouse']

从这段代码中,我们得到了一个多索引的数据框。

df

                              amount
type   species    colour        
animal cat        black        1
       mouse      grey         5
plant  houseplant green       11

如果您访问该行索引,它将输出:

df.loc[ind,:]

                       amount
type   species colour        
animal mouse   grey         5

但是,如果我想使用相同的IndexSlice删除某些行,您会发现它不允许切片:

df.drop(ind)

为此,您将得到一个错误:TypeError:不可散列的类型:'sl​​ice'

如何使用IndexSlice删除该行?

1 个答案:

答案 0 :(得分:1)

这是我当前解决此问题的方法。请评论并添加您的解决方案。

通过在数据帧中运行切片器并提取索引,然后使用它来删除行,从而与pd.IndexSlice配合使用:

df.drop(df.loc[ind,:].index)

                          amount
type   species    colour        
animal cat        black        1
plant  houseplant green       11