根据其他列值将新列添加到数据框

时间:2020-07-26 03:04:11

标签: python pandas dataframe

我有一个包含两列的数据框: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循环执行此操作,根据某些条件将值添加到字典中,但是对于大型数据框,此逻辑效率不高

有什么更好的方法吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以按照以下步骤操作:

  1. 通过串联first_name,last_name和“ domain.com”在dataframe2中创建一个新列“ email”。

    dataframe2["email"] = dataframe2["first_name"]+"."+dataframe2["last_name"]+ "@domain.com"

进行其他任何必要的字符串更改(根据您的数据),以使此电子邮件格式与dataframe1中的电子邮件完全匹配。

  1. 现在,通过

    左联接dataframe1和dataframe2

    result = dataframe1.merge(dataframe2, on='email', how='left')

  2. 最后从“ num”列中删除NaN,并将其替换为0。

    result['num'] = result['num'].fillna(0)

您可以编辑查询或result数据框以删除生成的额外列。

答案 1 :(得分:0)

从df1中提取名称和姓氏并添加为列

在名称和姓氏上将df1与df2合并