在熊猫数据框中查找具有相同列值的行

问题描述:

我有两个具有不同列大小的数据框,其中四列在两个数据框中可以具有相同的值。我想在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 

这是相当简单的。如果您检查两个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) 

我认为你需要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 

您可以使用逻辑运算符。有些想法可以参考Logic operator for boolean indexing in PandasElement-wise logical OR in Pandas

但是您的规范不足以提供解决方案草图,因为我不知道df1中的行应如何与df2一起使用。是否行数相同,并且df1中的每行都应具有与同一行中的df2中的布尔值相同的行的列A,B,C和D是相同的?