You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于同DataFrame内查找添加manager_name列的高效实现

基于Pandas高效添加经理姓名列的需求

我正尝试找到一种基于pandas的简洁方案,为DataFrame添加额外列以提升可读性,具体是通过同表查找填充经理姓名。现有数据(已截断)中manager_id与对应用户的user_id一致,数据如下:

last_namefirst_nameuser_idmanager_id
scorsesemartin12
wenderswim22
kurosawaakira33
sabusabu43

期望得到的结果如下:

last_namefirst_nameuser_idmanager_idmanager_name
scorsesemartin12wim wenders
wenderswim22wim wenders
kurosawaakira33akira kurosawa
sabusabu43akira kurosawa

目前我已实现功能,但方法是通过遍历DataFrame转换的字典,属于不够优雅的临时方案:

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

希望找到无需字典遍历的高效实现方式。


高效实现方案

方法1:map结合姓名映射字典

这是最简洁高效的方式,利用Pandas矢量化操作避免遍历:

# 构建user_id到完整姓名的映射字典
manager_name_map = df_kantoku.set_index('user_id').apply(
    lambda x: f"{x['first_name']} {x['last_name']}", axis=1
).to_dict()

# 直接映射填充manager_name列
df_kantoku['manager_name'] = df_kantoku['manager_id'].map(manager_name_map)

方法2:自连接(merge)

如果后续需要扩展经理相关属性,自连接逻辑更直观:

# 提取经理信息并拼接姓名
manager_info = df_kantoku[['user_id', 'first_name', 'last_name']].rename(
    columns={'user_id': 'manager_id', 'first_name': 'manager_first', 'last_name': 'manager_last'}
)
manager_info['manager_name'] = manager_info['manager_first'] + ' ' + manager_info['manager_last']

# 原表与经理信息表左连接
df_result = df_kantoku.merge(manager_info[['manager_id', 'manager_name']], on='manager_id', how='left')

方案优势

  • map方法:代码极简,执行效率高,适合仅需填充姓名的场景,彻底避免手动遍历和重复索引查找。
  • merge方法:扩展性强,若后续需添加经理的其他属性(如部门、职级),只需修改经理信息表即可。

两种方案均利用Pandas内置的矢量化操作,比遍历字典的方式性能提升显著,代码可读性也更强。

内容的提问来源于stack exchange,提问作者chibisuketyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:13:21