2015-05-19 27 views
0

我有兩個Python的大熊貓數據框如下:找到2數據幀的共同行2列

DF1= 
    A B C D 
0 AA BA KK 0 
1 AD BD LL 0 
2 AF BF MM 0 

DF2= 
    K L 
0 AA BA 
1 AD BF 

在什麼我想到底是:

DF1= 
    A B C D 
0 AA BA KK 1 
1 AD BD LL 0 
2 AF BF MM 0 

所以,我想比較兩個數據幀,我想了解哪個第一數據幀(對於列A和B)的行是在共同的第二數據幀(列K和L)和對第一數據幀的coulmn d分配1。

我一直在使用下面的代碼:

print (df1['A'].isin(df2['A']) & df1['B'].isin(df2['B'])).astype(int) 

但是,這不正是我期待

如何可以實現?要做到這一點

+0

我覺得這個問題是屬於計算器,並希望版主將有遷移它。 –

回答

2

一種方法是簡單地通過使用merge功能選擇你想加入哪個鍵。

所以,首先,如果我們在創造DF2某種指標和加盟,我們有:

DF2['inDF2'] = 1 
DF3 = pd.merge(DF1, DF2, how='left', left_on=['A', 'B'], right_on=['K', 'L']) 

然後,您可以簡單地添加列DinDF2獲得所需的結果。

DF3['D'] = DF3['D'] + DF3['inDF2'].fillna(0) 

刪除相關列會得到你的數據集之後:

DF3.drop(['K', 'L', 'inDF2'], axis=1, inplace=True) 

隨着輸出:

>>> DF3 
    A B C D 
0 AA BA KK 1 
1 AD BD LL 0 
2 AF BF MM 0 

全碼:

import pandas as pd 

d1 = { 
'A' : ['AA', 'AD', 'AF'], 
'B' : ['BA', 'BD', 'BF'], 
'C' : ['KK', 'LL', 'MM'], 
'D' : [0, 0, 0] 
} 

d2 = { 
'K' : ['AA', 'AD'], 
'L' : ['BA', 'BF'] 
} 

DF1 = pd.DataFrame(data=d1) 
DF2 = pd.DataFrame(data=d2) 
DF2['inDF2'] = 1 

DF3 = pd.merge(DF1, DF2, how='left', left_on=['A', 'B'], right_on=['K', 'L']) 
DF3['D'] = DF3['D'] + DF3['inDF2'].fillna(0) 
DF3.drop(['K', 'L', 'inDF2'], axis=1, inplace=True)