2016-10-05 93 views

回答

5

您可以使用boolean indexing和條件與isin,反轉布爾Series~

import pandas as pd 

USERS = pd.DataFrame({'email':['[email protected]','[email protected]','[email protected]','[email protected]','[email protected]']}) 
print (USERS) 
    email 
0 [email protected] 
1 [email protected] 
2 [email protected] 
3 [email protected] 
4 [email protected] 

EXCLUDE = pd.DataFrame({'email':['[email protected]','[email protected]']}) 
print (EXCLUDE) 
    email 
0 [email protected] 
1 [email protected] 
print (USERS.email.isin(EXCLUDE.email)) 
0  True 
1 False 
2 False 
3 False 
4  True 
Name: email, dtype: bool 

print (~USERS.email.isin(EXCLUDE.email)) 
0 False 
1  True 
2  True 
3  True 
4 False 
Name: email, dtype: bool 

print (USERS[~USERS.email.isin(EXCLUDE.email)]) 
    email 
1 [email protected] 
2 [email protected] 
3 [email protected] 

merge另一種解決方案:

df = pd.merge(USERS, EXCLUDE, how='outer', indicator=True) 
print (df) 
    email  _merge 
0 [email protected]  both 
1 [email protected] left_only 
2 [email protected] left_only 
3 [email protected] left_only 
4 [email protected]  both 

print (df.ix[df._merge == 'left_only', ['email']]) 
    email 
1 [email protected] 
2 [email protected] 
3 [email protected] 
+0

非常好!我對這兩個答案都滿意,但「合併」解決方案似乎比第一個更簡單。此外,我意識到「指標」參數可以幫助我解決相關問題。 再次感謝。 – Vini

+0

很高興能幫到你! – jezrael

相關問題