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

基于Pandas处理HR数据:筛选指定主管下属及层级异常排查

问题1:筛选主管ID存在于dfA中的员工

直接使用isin()方法匹配dfB的Supervisor_ID与dfA的Supervisor_ID即可,代码如下:

# 筛选主管ID在dfA中的员工
filtered_employees = dfB[dfB['Supervisor_ID'].isin(dfA['Supervisor_ID'])]
# 查看筛选结果
print(filtered_employees)

执行后会直接得到你期望的筛选结果表格。

问题2:L_3返回空DataFrame的排查与修复

你的L_3为空,大概率是代码逻辑冗余导致匹配失效,或是存在数据类型不匹配的问题,以下是具体分析和修复方案:

问题分析

  1. 用np.where构造DataFrame的写法过于绕,容易忽略原始数据的关联关系;
  2. 可能存在L_2['Corporate_ID']与df['Supervisor_ID']数据类型不匹配的情况(比如一个是字符串、一个是整数),导致isin()无法匹配结果;
  3. 可先验证df['Supervisor_ID']中是否存在L_2['Corporate_ID']的取值,确认是否有匹配基础。

修复后的层级计算代码

改用直观的布尔索引筛选,避免冗余操作,同时保留清晰的关联逻辑:

import pandas as pd

# L0:最高层级
L_0 = pd.DataFrame({"Corporate_ID": [60331], "Level": ["L0"]})

# L1:直接汇报给L0的员工
L_1 = df[df["Supervisor_ID"] == 60331].copy()
L_1["Level"] = "L1"
L_1 = L_1[["Corporate_ID", "Level"]]

# L2:直接汇报给L1的员工
L_2 = df[df["Supervisor_ID"].isin(L_1["Corporate_ID"])].copy()
L_2["Level"] = "L2"
L_2 = L_2[["Corporate_ID", "Level"]]
print(L_2)

# L3:直接汇报给L2的员工
# 先验证是否存在匹配项(排查用)
has_match = df["Supervisor_ID"].isin(L_2["Corporate_ID"]).any()
print(f"L3是否有匹配数据:{has_match}")

L_3 = df[df["Supervisor_ID"].isin(L_2["Corporate_ID"])].copy()
L_3["Level"] = "L3"
L_3 = L_3[["Corporate_ID", "Level"]]
print(L_3)

额外排查步骤

如果修复后L_3仍为空,执行以下操作定位问题:

  • 检查L2的ID是否存在于df的主管ID中:
    # 查看L2中哪些ID在df的Supervisor_ID里
    common_ids = L_2[L_2['Corporate_ID'].isin(df['Supervisor_ID'])]
    print(common_ids)
    
  • 统一数据类型(若类型不一致):
    print(f"L2 Corporate_ID类型:{L_2['Corporate_ID'].dtype}")
    print(f"df Supervisor_ID类型:{df['Supervisor_ID'].dtype}")
    # 统一转换为整数(或根据实际情况转字符串)
    L_2['Corporate_ID'] = L_2['Corporate_ID'].astype(int)
    df['Supervisor_ID'] = df['Supervisor_ID'].astype(int)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:17:42