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

如何基于DataFrame中经理的level值循环计算员工的level列

问题描述

我有一个用于可视化的DataFrame,需要填充其中的level列,要求员工的level值比其直属经理的level值高1(而非基于grade)。给出的DataFrame示例如下:

name        manager    grade   manager_grade   level
Michael    -           1       -               1
Jim        Michael     2       1               2      
Dwight     Michael     2       1               2
Darryl     Michael     3       1               2
Angela     Michael     3       1               2
Pam        Michael     4       1               2
Roy        Darryl      4       3               3
Kevin      Angela      4       3               3

我知道需要先按grade对表格排序,再通过for循环迭代计算level。目前我写出的代码如下:

for i in range(len(df)):
    if df[manager_grade][i] is None:
       df['level'][i] = df['grade'][i]
    else:
       df['level'][i] = df['manager_grade'][i]+ 1

但这段代码仅将manager_grade加1,并未基于经理的level值计算。请问如何修改代码以实现需求?

解决方案
  • 先确保数据按层级顺序排序:因为经理的level必须先被计算出来,才能计算下属的,所以先按grade升序排序(或者按层级关系排序,确保上级在下属前面)。
  • 用字典存储已计算的level值:这样可以快速查找经理的level,避免重复查询DataFrame,提升效率。
  • 迭代更新level列:遍历每一行,根据经理名称获取对应的level值,再计算当前员工的level。

修改后的代码如下:

import pandas as pd

# 先按grade升序排序,确保上级员工在下属之前被处理
df = df.sort_values('grade').reset_index(drop=True)

# 创建字典存储员工姓名到对应level的映射
level_map = {}

# 先初始化无直属经理的员工level
for idx, row in df.iterrows():
    if row['manager'] == '-':
        level_map[row['name']] = 1
        df.at[idx, 'level'] = 1

# 遍历剩余员工,基于经理的level计算自身level
for idx, row in df.iterrows():
    manager_name = row['manager']
    if manager_name != '-':
        # 从字典中获取经理的level,加1作为当前员工的level
        current_level = level_map[manager_name] + 1
        df.at[idx, 'level'] = current_level
        # 将当前员工的level存入字典,供其下属使用
        level_map[row['name']] = current_level

代码说明

  • 使用sort_values保证上级员工先被处理,这样计算下属时,经理的level已经存在于level_map中,不会出现找不到值的情况。
  • level_map字典实现了快速查询,比反复在DataFrame中检索经理信息更高效。
  • 如果你的DataFrame中表示无经理的标记不是'-'而是None,只需将判断条件改为pd.isna(row['manager'])即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:45:20