pandas 按多个元组切片MultiIndex

nimxete2  于 2023-02-02  发布在  其他
关注(0)|答案(1)|浏览(132)

我有一个具有多个索引级别的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'])

现在我想要seldf的所有行,其中(ab),在本例中除了第二行之外的所有行。
我确信我可以操纵索引(删除c级,选择,然后再次添加c级),但这感觉像是一种变通方法。内部连接也是如此。我一定是忽略了某个方法...?

but5z9lq

but5z9lq1#

一种方法是将Index.isinboolean indexing一起使用:

df = df[df.index.droplevel('c').isin(sel)]
print (df)
       d
a b c   
A X S  1
    T  3
B Y T  1

相关问题