【发布时间】:2019-03-18 19:09:36
【问题描述】:
我有以下使用三级 MultiIndex 的 DataFrame:
In [1]: iterables = [[1, 2], ['foo', 'bar'], ['one', 'two']]
...: midx = pd.MultiIndex.from_product(iterables)
...: df = pd.DataFrame(np.random.randn(8), index=midx)
...: df
Out[1]:
0
1 foo one -0.217594
two -1.361612
bar one 2.477790
two 0.874409
2 foo one 0.403577
two 0.076111
bar one 1.423512
two 0.047898
我想对索引进行切片,以便保留所有第一个级别,同时仅保留后两个级别的以下组合:('foo', 'one') 和('bar', 'two')。也就是说,我希望我的输出看起来像这样:
0
1 foo one -0.217594
bar two 0.874409
2 foo one 0.403577
bar two 0.047898
是否可以在一行中使用诸如.loc 之类的属性来执行此操作?
我知道我可以使用.xs 函数单独获取所需组合的横截面,但我更喜欢更短、更类似于切片的语法。具体来说,单行对我的用例很重要。
似乎以下应该可以工作:
df.loc[[(slice(None), 'foo', 'one'), (slice(None), 'bar', 'two')]]
但这会导致TypeError: unhashable type: 'slice'。
【问题讨论】:
标签: python pandas dataframe slice multi-index