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