我有一个带有3层MultiIndex的pandas dataframe。我试图根据与两个级别对应的值列表提取此数据框的行。
我的代码大致如下:
ix = pd.MultiIndex.from_product([[1, 2, 3], ['foo', 'bar'], ['baz', 'can']], names=['a', 'b', 'c'])
data = np.arange(len(ix))
df = pd.DataFrame(data, index=ix, columns=['hi'])
print(df)
hi
a b c
1 foo baz 0
can 1
bar baz 2
can 3
2 foo baz 4
can 5
bar baz 6
can 7
3 foo baz 8
can 9
bar baz 10
can 11
现在我想获取所有索引级别中包含 'b' 和 'c' 的行:
ix_use = pd.MultiIndex.from_tuples([('foo', 'can'), ('bar', 'baz')], names=['b', 'c'])
即,hi
的值在第一层上使用('foo', 'can')
或('bar', 'baz')
,在第二和第三层上分别使用b
和c
: (1, 2, 5, 6, 9, 10)
。
因此,我想在第一级上进行slice(None)
,并在第二和第三级中提取特定的元组。
最初,我认为将多索引对象传递给.loc会提取我想要的值/级别,但这不起作用。如何最好地执行此类操作?