我有两个不同的数据框,我想比较两个列。如果第一个数据框的值出现在第二个数据框的列中的任何位置,我想复制匹配值旁边的值,然后将其复制到第一个数据框的新列中。
数据帧如下:
DF1
╔═══════════════════╗
║ Email ║
╠═══════════════════╣
║ Johndoe@gmail.com ║
║ janedoe@gmail.com ║
║ foo@gmail.com ║
║ foobar@gmail.com ║
║ bar@gmail.com ║
╚═══════════════════╝
DF2
╔════════════════════╦═════════════╗
║ Email ║ Phone ║
╠════════════════════╬═════════════╣
║ Johndoe@gmail.com ║ 111-111-111 ║
║ Johndoe@gmail.com ║ 111-111-111 ║
║ Johndoe@gmail.com ║ 111-111-111 ║
║ Jakedoe@gmail.com ║ 123-123-123 ║
║ jamesdoe@gmail.com ║ 321-321-321 ║
║ janedoe@gmail.com ║ 222-222-222 ║
║ janedoe@gmail.com ║ 222-222-222 ║
║ foo@gmail.com ║ 333-333-333 ║
║ foobar@gmail.com ║ 444-444-444 ║
║ foobar@gmail.com ║ 444-444-444 ║
║ bar@gmail.com ║ 555-555-555 ║
╚════════════════════╩═════════════╝
输出应如下所示:
╔═══════════════════╦═════════════╗
║ email ║ phone ║
╠═══════════════════╬═════════════╣
║ Johndoe@gmail.com ║ 111-111-111 ║
║ janedoe@gmail.com ║ 222-222-222 ║
║ foo@gmail.com ║ 333-333-333 ║
║ foobar@gmail.com ║ 444-444-444 ║
║ bar@gmail.com ║ 555-555-555 ║
╚═══════════════════╩═════════════╝
我尝试遍历DF1中的列,并将每个值与DF2中的对应列进行比较,但它还会返回重复项。
用Pandas完成此任务的好方法是什么?
谢谢!
答案 0 :(得分:3)
您可以先使用.merge()
,然后再使用.drop_duplicates()
new_df = df1.merge(df2, on='Email', how='left').drop_duplicates()