根据同一数据帧中的查找将值添加到数据帧

问题描述 投票:0回答:1

我尝试着想出一个解决方案,用于在 pandas 数据框中查找和填充附加列以提高可读性。

以下数据(已截断)可用,其中 manager_id 填充相应的 user_ids

姓氏 名字 用户ID 经理_id
斯科塞斯 马丁 1 2
文德斯 维姆 2 2
黑泽 3 3
萨布 萨布 4 3

结果应该是:

姓氏 名字 用户ID 经理_id 经理姓名
斯科塞斯 马丁 1 2 维姆·文德斯
文德斯 维姆 2 2 维姆·文德斯
黑泽 3 3 黑泽明
萨布 萨布 4 3 黑泽明

到目前为止,我一直在努力寻找一个简洁而好的解决方案,仅使用基于 pandas 的方法。我有一个可行的解决方案,但这是一个肮脏的黑客,迭代同一数据帧的字典并根据名称等查找行索引。非常丑陋。

    dictionary_of_kantoku = df_kantoku.to_dict(orient="records")
    for kantoku in dictionary_of_kantoku:
        row_index = df_kantoku.loc[
            (df_kantoku['last_name'].str.contains(kantoku['last_name'])
             & df_kantoku['first_name'].str.contains(kantoku['first_name']))].index[0]
        manager_id = df_kantoku[(df_kantoku['last_name'].str.contains(kantoku['last_name'])
             & df_kantoku['first_name'].str.contains(kantoku['first_name']))]['manager_id'].values[0]
        manager_name = df_kantoku[df_kantoku['user_id'] == manager_id]['first_name'].values[0] + ' ' + df_kantoku[df_kantoku['user_id'] == manager_id]['last_name'].values[0]
        if row_index != 0:
            resultset.loc[row_index, 'manager_name'] = manager_name

有人可以阐明如何在没有字典破解和迭代的情况下有效地完成此操作吗?

非常感谢。

python pandas dataframe
1个回答
0
投票

你可以简单地这样做

import pandas as pd

data = {
    'last_name': ['Scorsese', 'Wenders', 'Kurosawa', 'Sabu'],
    'first_name': ['Martin', 'Wim', 'Akira', 'Sabu'],
    'user_id': [1, 2, 3, 4],
    'manager_id': [2, 2, 3, 3]
}

df = pd.DataFrame(data)

name_map = df.set_index('user_id')['first_name'] + ' ' + df.set_index('user_id')['last_name']
df['manager_name'] = df['manager_id'].map(name_map)

print(df)

这给出了

 last_name first_name  user_id  manager_id    manager_name
0  Scorsese     Martin        1           2     Wim Wenders
1   Wenders        Wim        2           2     Wim Wenders
2  Kurosawa      Akira        3           3  Akira Kurosawa
3      Sabu       Sabu        4           3  Akira Kurosawa
[ ]


© www.soinside.com 2019 - 2024. All rights reserved.