Pandas/Python -基于其他列的交叉引用创建新列



我有一个员工信息数据集。在这个数据集中,相关字段是EmployeeName列、ID列和superorname列。我想创建一个名为superorid的新列,它为我们提供每个员工主管的ID。

输入dataframe:

EmployeeName   ID SupervisorName
Jim  123       Brittany
Brittany  345           Todd
Todd  456          Grace

预期输出:

EmployeeName   ID SupervisorName  SupID
Jim  123       Brittany    345
Brittany  345           Todd    456

我在如何有效地编写这个方面受到阻碍,我尝试过使用np.where()语法和.iloc[],但我是python的新手,并将感谢如何解决这个问题的任何帮助。

您可以使用merge,并将DataFrame与自身合并

import pandas as pd
data =[{'EmployeeName': 'Jim', 'ID': 123,'SupervisorName': 'Brittany'},
{'EmployeeName': 'Brittany', 'ID': 345,'SupervisorName': 'Todd'},
{'EmployeeName': 'Todd', 'ID': 456,'SupervisorName': 'Grace'}]
df = pd.DataFrame(data)
df_sup = df[['EmployeeName','ID']]
df_sup= df_sup.rename(columns={'EmployeeName': 'SupervisorName', 'ID': 'SupID'})
df = df.merge(right=df_sup, on='SupervisorName', how='inner')
df

输出:

EmployeeName   ID SupervisorName  SupID
0          Jim  123       Brittany    345
1     Brittany  345           Todd    456

您可以将EmployeeName设置为键以映射到它们的id:

df1['SupID'] = df1['SupervisorName'].map(df1.set_index('EmployeeName')['ID'])
df1 = df1.dropna().astype({'SupID': int})

输出:

EmployeeName   ID SupervisorName  SupID
0          Jim  123       Brittany    345
1     Brittany  345           Todd    456

最新更新