如何迭代每一行,从一个数据帧的特定列中查找下一个匹配的列值,并将其与另一个数据帧进行比较?

How to iterate each row and find the next matching column value from a specific column from one dataframe and comparing it to another dataframe?

提问人:gfchqz 提问时间:1/6/2023 最后编辑:gfchqz 更新时间:1/6/2023 访问量:222

问:

我有两个数据帧:

DF1:A组

employee_id  |     key
100               101001
101               020208
102               101002
103               020208
104               020208
...               ...
300               010506

DF2:B组

employee_id  |    key
110              101001
111              020208
112              020105
113              020208
114              020208
...              ...
600              051007

比较两个数据帧中的每一行。对于每个匹配的员工,创建一个新的 DataFrame,并将其从 DF2 中删除匹配的人员。keyDF1.employee_id, DF1.key, DF2.employee_id

我想一次迭代 DF1 中的每个员工,并在 DF2 中找到一条行进记录,一旦匹配,就会在 DF2 中删除该记录。您的目标不是为 DF1 中的每个匹配员工提供来自 DF2 的重复匹配员工。如何迭代这个过程?

clean = df_1.merge(df_2, on=['key'], how='left')

上面的脚本将给我重复的记录。我希望新数据帧如下所示:

新建数据帧(示例):

employee_id_df1  |    key      |  employee_id_df2
100                  101001         110
101                  020208         111
103                  020208         113
104                  020208         114

目标是进行 1 对 1 的比赛。

Python DataFrame 循环 迭代比较

评论

0赞 Andrej Kesely 1/6/2023
和 中的列是否相同?keydf1df2
0赞 gfchqz 1/6/2023
@AndrejKesely它的不同之处

答:

0赞 Andrej Kesely 1/6/2023 #1

您可以尝试创建在合并中使用的临时列:

df1["tmp"] = df1.groupby("key").cumcount()
df2["tmp"] = df2.groupby("key").cumcount()

df_out = pd.merge(df1, df2, on=["key", "tmp"], how="inner")
df_out = df_out.rename(
    columns={"employee_id_x": "employee_id_df1", "employee_id_y": "employee_id_df2"}
).drop(columns="tmp")

print(df_out)

指纹:

   employee_id_df1     key  employee_id_df2
0              100  101001              110
1              101   20208              111
2              102   20105              112
3              103   20208              113
4              104   20208              114