Python 在dataframe中查找具有相同列值的行

Python 在dataframe中查找具有相同列值的行,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个列大小不同的数据帧,其中四列可以在两个数据帧中具有相同的值。我想在df1中创建一个新列,如果df2中有一行的列'a'、'B'、'C'和'D'的值与df1中的行相同,则该列的值为1。如果没有这样的行,我希望值为0。行“E”和“F”对于检查值并不重要 是否有一个pandas函数可以这样做,或者我必须在一个循环中这样做 例如: df1 = A B C D E F 1 1 20 20 3 2 1 1 12 14 1

我有两个列大小不同的数据帧,其中四列可以在两个数据帧中具有相同的值。我想在df1中创建一个新列,如果df2中有一行的列'a'、'B'、'C'和'D'的值与df1中的行相同,则该列的值为1。如果没有这样的行,我希望值为0。行“E”和“F”对于检查值并不重要

是否有一个pandas函数可以这样做,或者我必须在一个循环中这样做

例如:

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
我想您需要使用
左连接
和参数
indicator=True
,然后将列
\u merge
与(与
=
相同)进行比较,最后通过以下方式将布尔值
True
False
转换为
1
0

详情:

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

这相当简单。如果检查两个数据帧是否相等,它将检查每个元素是否等于相应的元素

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

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

您可以使用逻辑运算符来实现这一点。你可以看一看或想一些主意

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

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

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