如果只匹配第一个唯一值,则熊猫比较两列并复制另一列的值

时间:2018-11-05 16:28:57

标签: python pandas dataframe

我有两个不同的数据框,我想比较两个列。如果第一个数据框的值出现在第二个数据框的列中的任何位置,我想复制匹配值旁边的值,然后将其复制到第一个数据框的新列中。

数据帧如下:

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完成此任务的好方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以先使用.merge(),然后再使用.drop_duplicates()

new_df = df1.merge(df2, on='Email', how='left').drop_duplicates()