2017-04-06 92 views
3

令人驚訝的是,我無法在pandas DataFrame中找到SQL的「NOT IN」運算符的模擬。PANDAS模擬SQL的「NOT IN」運算符

A = pd.DataFrame({'a':[6,8,3,9,5], 
         'b':['II','I','I','III','II']}) 

B = pd.DataFrame({'c':[1,2,3,4,5]}) 

我想從A所有行,這a不含有Bc值。 喜歡的東西:

A = A[ A.a not in B.c] 
+1

這真是一個傻瓜:HTTPS:/ /stackoverflow.com/questions/12065885/how-to-filter-the-dataframe-rows-of-pandas-by-within-in你只是否定'isin'使用'〜'甚至這個:https:// stackoverflow.com/questions/32980087/pandas-not-in-in-and-between – EdChum

+0

雖然這是概念上的,一個重複的,另一個問題不包含短語「不在」...允許這個問題保持開放將有助於其他人搜索該確切的短語。 –

+1

@JDLong另一個問題確實在標題中沒有在:https://stackoverflow.com/questions/32980087/pandas-not-in-in-and-between – EdChum

回答

3

我覺得你真的很接近 - 需要isin~爲否定布爾面膜 - 也代替list使用SeriesB.c

print (~A.a.isin(B.c)) 
0  True 
1  True 
2 False 
3  True 
4 False 
Name: a, dtype: bool 

A = A[~A.a.isin(B.c)] 
print (A) 
    a b 
0 6 II 
1 8 I 
3 9 III