【问题标题】:Pandas/Python - Create new column based on cross reference from other columnPandas/Python - 根据其他列的交叉引用创建新列
【发布时间】:2021-10-12 20:58:57
【问题描述】:

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

输入数据框:

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 新手,希望对如何解决这个问题提供任何帮助。

【问题讨论】:

    标签: python pandas numpy jupyter-notebook


    【解决方案1】:

    您可以使用合并,并将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
    

    【讨论】:

    • 谢谢院长!这非常有效。我一定会记住这个技巧的。
    【解决方案2】:

    您可以将您的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 2020-04-25
      • 2020-12-05
      • 2020-08-03
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多