我有一个员工信息数据集。在这个数据集中,相关字段是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