我有一个具有多个索引级别的DataFrame。我通过选择除最后一个级别之外的所有级别的多个组合来定义某个子集。然后我想使用该子集对原始DataFrame进行切片,但我找不到方法。最好看一个简单的示例:
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'a': ['A', 'B', 'A', 'B'], 'b': ['X', 'X', 'X', 'Y'],
...: 'c': ['S', 'T', 'T', 'T'], 'd': [1, 2, 3, 1]}).set_index(['a', 'b', 'c'])
In [3]: print(df.to_string())
d
a b c
A X S 1
B X T 2
A X T 3
B Y T 1
In [4]: sel = df.index.droplevel('c')[df.d == 1] # Some selection on multiple index levels.
In [5]: print(sel)
MultiIndex([('A', 'X'),
('B', 'Y')],
names=['a', 'b'])
现在我想要sel
中df
的所有行,其中(a
,b
),在本例中除了第二行之外的所有行。
我确信我可以操纵索引(删除c
级,选择,然后再次添加c
级),但这感觉像是一种变通方法。内部连接也是如此。我一定是忽略了某个方法...?
1条答案
按热度按时间but5z9lq1#
一种方法是将
Index.isin
与boolean indexing
一起使用: