Python 检查元素集是否在索引中

Python 检查元素集是否在索引中,python,pandas,Python,Pandas,, 是检查“g”是否在我的索引中的方法。如果我想对很多元素都这样做呢?比如说,我有一个iterable对象myIterable(np.ndarray,list),我想获取索引中的元素或不在索引中的元素 inIterable = [x for x in myIterable if x in df.index] notInIterable = [x for x in myIterable if x not in df.index] 可以,但效率很低。在和中创建和非最有效的方法是什么?好的,如果我正

,

是检查“g”是否在我的索引中的方法。如果我想对很多元素都这样做呢?比如说,我有一个iterable对象
myIterable
(np.ndarray,list),我想获取索引中的元素或不在索引中的元素

inIterable = [x for x in myIterable if x in df.index]
notInIterable = [x for x in myIterable if x not in df.index]

可以,但效率很低。在和中创建
最有效的方法是什么?

好的,如果我正确理解如何测试成员资格,您可以使用:

相反,一种方法是构造熊猫索引并使用:

使用过滤器:

a = [1,2,3,4,5]    # Index
b = [99,2,99,5]    # MyIterable

in = filter(lambda x: x in a, b)
注意:您的示例应该是:

in = [x for x in myIterable if x in df.index]

“in”是一个保留字。

这并不是我想要的——或者至少我不知道如何使用它。假设您的iterable是
l=[1,2,3]
。现在,
3
是一个不在索引中的元素。也就是说,
notIn=[3]
。我怎样才能得到
notIn
?所以你只想测试成员资格而不是屏蔽正确吗?嗯,我找不到
index.complements()
方法。因此,要获得
notIn
,我首先需要
in=df.index.intersection(l)
,然后
notIn=set(l)-set(in)
?听起来很武断,它支持交集而不是补集。啊,它不是补集,它的区别:你可以使用
difference
,但你需要构造一个索引对象
In [137]:

pd.Index(l).difference(df.index)
Out[137]:
Int64Index([7], dtype='int64')
a = [1,2,3,4,5]    # Index
b = [99,2,99,5]    # MyIterable

in = filter(lambda x: x in a, b)
in = [x for x in myIterable if x in df.index]