提问人:gfchqz 提问时间:1/6/2023 最后编辑:gfchqz 更新时间:1/6/2023 访问量:222
如何迭代每一行,从一个数据帧的特定列中查找下一个匹配的列值,并将其与另一个数据帧进行比较?
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?
问:
我有两个数据帧:
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 中删除匹配的人员。key
DF1.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 的比赛。
答:
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
评论
key
df1
df2