2016-10-05 12 views
5

私は2つのデータフレームを持っています.1つはUSERS、もう1つはEXCLUDEです。どちらも "email"という名前のフィールドを持っています。パンダでは、別のデータフレームに基づいてデータフレームから行を削除する方法はありますか?

基本的に、EXCLUDEに含まれる電子メールを持つUSERSのすべての行を削除したいと考えています。

私はそれをどのように行うことができますか?

答えて

5

あなたは反転isinboolean indexingと条件を、使用することができます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

関連する問題