2016-10-05 6 views
5

मेरे पास 2 डेटा फ्रेम्स हैं, एक नामित यूएसईआरएस और दूसरा नाम EXCLUDE है। उनमें से दोनों का नाम "ईमेल" है।पांडस में, किसी अन्य डेटा फ़्रेम के आधार पर डेटा फ़्रेम से पंक्तियां कैसे हटाएं?

असल में, मैं उन उपयोगकर्ताओं में हर पंक्ति को हटाना चाहता हूं जिनमें EXCLUDE में एक ईमेल है।

मैं यह कैसे कर सकता हूं?

उत्तर

5

आप boolean indexing और isin साथ हालत, inverting का उपयोग कर सकते बूलियन 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

संबंधित मुद्दे