我想从具有多个独立索引器的 MultiIndex 中选择多个列。例如
df = pd.DataFrame(
np.zeros((2,4)),
columns=pd.MultiIndex.from_product([('a','b'),(1,2)])
)
来自此数据框
a b
1 2 1 2
0 0 0 0 0
1 0 0 0 0
我想选择 'a'
下的所有列加('b', 1)
,例如df[[('a', 1), ('a', 2), ('b', 1)]]
,但我不想显式指定 'a'
下面的列的所有级别.
什么不起作用:
-
df[['a', ('b', 1)]]
:KeyError: "[('b', 1)] not in index"
-
df.loc[:, ['a', ('b', 1)]]
:KeyError: "[('b', 1)] not in index"
-
df[[('a', slice(None)), ('b', 1)]]
:TypeError: unhashable type: 'slice'
-
df.loc[:, [pd.IndexSlice['a', :], ('b', 1)]]
:TypeError: unhashable type: 'slice'
我希望能够做的另一件类似的事情是:('a', 1)
加pd.IndexSlice[:, 2]
最佳答案
您可以单独选择列并将它们连接起来。
out = pd.concat([df.xs('a', axis=1, drop_level=False),
df.xs(('b', 1), axis=1, drop_level=False)],
axis=1)
print(out)
a b
1 2 1
0 0.0 0.0 0.0
1 0.0 0.0 0.0
关于pandas MultiIndex 的多个切片器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76315518/