列之间匹配行,如果行在熊猫中匹配则创建新列

时间:2020-03-17 18:21:53

标签: python pandas merge

如果我具有以下数据框(df)

emp_id  email_ad                    full_nm             mgr_emp_id
65391   Pierric.Beckert@email.com   Pierric Beckert     57834
65392   Mat.Yokoyama@email.com      Mat Yokoyama        92499
65393   Kevin.Harvey@email.com      Kevin Harvey        45325

对于mgr_emp_id中的每一行,如果mgr_emp_idemp_id中的员工ID匹配,则通过从{{ 1}}列。

我尝试了以下操作,但不确定如何调用该函数

Manager_Name

我试图这样称呼它:

full_nm

但是我收到一个错误:

TypeError:“浮动”对象不可下标

如果有更好的方法来实现我要完成的任务,请提供帮助:)

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,那么您想为每个匹配ID实例“创建新列”的想法就很混乱。大概您想要的是称为“管理名称”的附加列,并且如果emp_idmgr_emp_id匹配,则您希望full_nm等于“管理名称”。显然,在不平等的地方,您将不知道“管理名称”。

要实现此目的,您只需创建一个新的NAN值列,过滤emp_idmgr_emp_id匹配的行,并用该行的full_nm值替换NAN值,这些行。

df = pd.DataFrame([
    [65391, 'Pierric.Beckert@email.com', 'Pierric Beckert', 57834],
    [65392, 'Mat.Yokoyama@email.com', 'Mat Yokoyama', 92499],
    [65393, 'Kevin.Harvey@email.com', 'Kevin Harvey', 45325],
    [11111, 'example.same@email.com', 'Example Same', 11111]],
    columns=['emp_id', 'email_ad', 'full_nm', 'mgr_emp_id'])

df['manager_name'] = np.nan

df.loc[df.emp_id.eq(df.mgr_emp_id), 'manager_name'] = df.full_nm

在最后一行中,我们使用loc查找emp_idmgr_emp_id匹配的行以及感兴趣的列(“ manager_name”),并将值输入到该dataframe元素中,取代NAN。

结果是:

    emp_id  email_ad                    full_nm         mgr_emp_id  manager_name
0   65391   Pierric.Beckert@email.com   Pierric Beckert 57834       NaN
1   65392   Mat.Yokoyama@email.com      Mat Yokoyama    92499       NaN
2   65393   Kevin.Harvey@email.com      Kevin Harvey    45325       NaN
3   11111   example.same@email.com      Example Same    11111       Example Same

如果您想做不同的事情,我想您会想要单独的数据框或形状不同的数据框。