2017-10-09 72 views
1

我有兩個具有不同列大小的數據框,其中四列在兩個數據框中可以具有相同的值。我想在df1中創建一個新列,如果在df2中有一行的列'A','B','C'和'D'具有與df1中的行相同的值,則值爲1 。如果沒有這樣的行,我希望該值爲0.行'E'和'F'對於檢查值並不重要。在熊貓數據框中查找具有相同列值的行

有熊貓的功能,可以做到這一點,或者我必須在循環中。

例如:

df1 = 
A B C D E F 
1 1 20 20 3 2 
1 1 12 14 1 3 
2 1 13 43 4 3 
2 2 12 34 1 4 

df2 = 
A B C D E  
1 3 12 14 2  
1 1 20 20 4 
2 2 21 31 5  
2 2 12 34 8  

預期輸出:

df1 = 
A B C D E F Target 
1 1 20 20 3 2 1 
1 1 12 14 1 3 0 
2 1 13 43 4 3 0 
2 2 12 34 1 4 1 

回答

1

這是相當簡單的。如果您檢查兩個DataFrame是否相等,它會檢查每個元素是否等於相應的元素。

col_list = ['A', 'B', 'C', 'D'] 
idx = (df1.loc[:, col_list] == df2.loc[:, col_list]).all(axis=1) 

df1['new_row'] = idx.astype(int) 
0

我認爲你需要mergeleft join和參數indicator=True,然後用eq(同==)比較列_merge和最後轉換布爾TrueFalse10astype

cols = list('ABCD') 
df1['Target'] = pd.merge(df1[cols], 
         df2[cols], how='left', indicator=True)['_merge'].eq('both').astype(int) 
print (df1) 

    A B C D E F Target 
0 1 1 20 20 3 2  1 
1 1 1 12 14 1 3  0 
2 2 1 13 43 4 3  0 
3 2 2 12 34 1 4  1 

詳細信息:

print (pd.merge(df1[cols], df2[cols], how='left', indicator=True)) 
    A B C D  _merge 
0 1 1 20 20  both 
1 1 1 12 14 left_only 
2 2 1 13 43 left_only 
3 2 2 12 34  both 
相關問題