如果我具有以下数据框(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_id
与emp_id
中的员工ID匹配,则通过从{{ 1}}列。
我尝试了以下操作,但不确定如何调用该函数
Manager_Name
我试图这样称呼它:
full_nm
但是我收到一个错误:
TypeError:“浮动”对象不可下标
如果有更好的方法来实现我要完成的任务,请提供帮助:)
答案 0 :(得分:0)
如果我正确理解了您的问题,那么您想为每个匹配ID实例“创建新列”的想法就很混乱。大概您想要的是称为“管理名称”的附加列,并且如果emp_id
与mgr_emp_id
匹配,则您希望full_nm
等于“管理名称”。显然,在不平等的地方,您将不知道“管理名称”。
要实现此目的,您只需创建一个新的NAN值列,过滤emp_id
与mgr_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_id
与mgr_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
如果您想做不同的事情,我想您会想要单独的数据框或形状不同的数据框。