我有以下使用三级多重索引的数据帧:
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')
和{
例如,是否可以在一行中使用诸如^{
我知道我可以使用^{
似乎以下方法应该有效:
df.loc[[(slice(None), 'foo', 'one'), (slice(None), 'bar', 'two')]]
但这会导致TypeError: unhashable type: 'slice'
。在
这里有一个基于^{} 的解决方案。您的多重索引有未命名的级别,但是级别}的级别未命名,则可以使用特殊名称来引用它们。”
k
可以使用特殊名称ilevel_k
访问,根据the docs:“如果{可以通过先删除第一个索引级别,然后使用^{} 和元组列表来构造布尔掩码:
jpp和Peter的解决方案很好。如果有人发现它有用,下面是另一种使用序列作为过滤器的方法。在
相关问题 更多 >
编程相关推荐