基于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为空,大概率是代码逻辑冗余导致匹配失效,或是存在数据类型不匹配的问题,以下是具体分析和修复方案:
问题分析
- 用
np.where构造DataFrame的写法过于绕,容易忽略原始数据的关联关系; - 可能存在
L_2['Corporate_ID']与df['Supervisor_ID']数据类型不匹配的情况(比如一个是字符串、一个是整数),导致isin()无法匹配结果; - 可先验证
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
相关产品推荐
相关产品推荐

