Python 检查元素集是否在索引中
, 是检查“g”是否在我的索引中的方法。如果我想对很多元素都这样做呢?比如说,我有一个iterable对象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] 可以,但效率很低。在和中创建和非最有效的方法是什么?好的,如果我正
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]