我有一个包含两列的数据框:DNI,电子邮件。
我还有另一个具有:名字,姓氏,数字
这是数据结构:
数据框1:
DNI email
. 1 Name1.lastname1@domain.com
. 525 Name2.lastname2@domain.com
. 665 Name3.lastname3@domain.com
数据框2:
first name last name num
. name2 lastname2 8658685
. name1 lastname1 1131222
我想根据邮件将num列添加到第一个数据帧,并且如果电子邮件列的名称和姓氏组合不存在,我想添加“ 0”值,它看起来像这样:
DNI email num
. 1 Name1.lastname1@domain.com 1131222
. 525 Name2.lastname2@domain.com 8658685
. 665 Name3.lastname3@domain.com 0
我不确定执行此操作的正确方法是什么...我正在考虑使用for循环执行此操作,根据某些条件将值添加到字典中,但是对于大型数据框,此逻辑效率不高
有什么更好的方法吗?
谢谢
答案 0 :(得分:1)
您可以按照以下步骤操作:
通过串联first_name,last_name和“ domain.com”在dataframe2中创建一个新列“ email”。
dataframe2["email"] = dataframe2["first_name"]+"."+dataframe2["last_name"]+ "@domain.com"
进行其他任何必要的字符串更改(根据您的数据),以使此电子邮件格式与dataframe1中的电子邮件完全匹配。
现在,通过
左联接dataframe1和dataframe2
result = dataframe1.merge(dataframe2, on='email', how='left')
最后从“ num”列中删除NaN,并将其替换为0。
result['num'] = result['num'].fillna(0)
您可以编辑查询或result
数据框以删除生成的额外列。
答案 1 :(得分:0)
从df1中提取名称和姓氏并添加为列
在名称和姓氏上将df1与df2合并