最近我想使用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:不可散列的类型:'slice'
如何使用IndexSlice删除该行?
答案 0 :(得分:1)
这是我当前解决此问题的方法。请评论并添加您的解决方案。
通过在数据帧中运行切片器并提取索引,然后使用它来删除行,从而与pd.IndexSlice配合使用:
df.drop(df.loc[ind,:].index)
amount
type species colour
animal cat black 1
plant houseplant green 11