我试图弄清楚一个解决方案,以便在pandas收件箱中查找和填充额外列,以提高可读性.

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

last_name first_name user_id manager_id
scorsese martin 1 2
wenders wim 2 2
kurosawa akira 3 3
sabu sabu 4 3

结果应该是:

last_name first_name user_id manager_id manager_name
scorsese martin 1 2 wim wenders
wenders wim 2 2 wim wenders
kurosawa akira 3 3 akira kurosawa
sabu sabu 4 3 akira kurosawa

到目前为止,我一直在努力寻找一个简洁而好的解决方案,只使用基于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

有人能解释一下如何在没有字典黑客和迭代的情况下高效地完成这件事吗?

非常感谢.

推荐答案

你可以简单地这样做

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
[ ]


Python相关问答推荐

如何防止Plotly在输出到PDF时减少行中的点数?

从包含数字和单词的文件中读取和获取数据集

将轨迹优化问题描述为NLP.如何用Gekko解决这个问题?当前面临异常:@错误:最大方程长度错误

try 与gemini-pro进行多轮聊天时出错

Pandas 有条件轮班操作

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

如何在UserSerializer中添加显式字段?

UNIQUE约束失败:customuser. username

处理具有多个独立头的CSV文件

Flask Jinja2如果语句总是计算为false&

(Python/Pandas)基于列中非缺失值的子集DataFrame

Python 3试图访问在线程调用中实例化的类的对象

一个telegram 机器人应该发送一个测验如何做?""

为什么后跟inplace方法的`.rename(Columns={';b';:';b';},Copy=False)`没有更新原始数据帧?

Python:从目录内的文件导入目录

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

Polars定制函数返回多列

如何将一个文件的多列导入到Python中的同一数组中?

正在try 让Python读取特定的CSV文件