基于pandas edgelist组织架构数据递归计算指定节点的团队规模
解决方案
你的原有代码核心问题是递归调用时没有接收下层递归返回的统计结果,导致间接下属的人数没有被累加。以下是可直接运行的实现方案:
import pandas as pd # 加载你的数据集,此处为样例数据构造逻辑,可替换为你自己的df读取代码 data = [ [1571, 'BB', 'CC', 1], [1573, 'AA', 'BB', 1], [1579, 'CC', 'BB', 0], [1609, 'M', 'BB', 0], [1613, 'N', 'BB', 0], [1646, 'O', 'BB', 0], [1650, 'P', 'BB', 0], [1651, 'Q', 'BB', 0], [1652, 'R', 'BB', 0], [1580, 'D', 'AA', 0], [1581, 'EE', 'AA', 1], [1596, 'F', 'AA', 0], [1597, 'G', 'AA', 0], [1599, 'H', 'AA', 0], [1601, 'I', 'AA', 0], [1602, 'J', 'AA', 0], [1603, 'K', 'AA', 0], [1607, 'L', 'AA', 0], [1607, 'z', 'EE', 0], [1652, 'S', 'DD', 0] ] df = pd.DataFrame(data, columns=['ID', 'Full Name', 'Manager Name', 'manager']) # 预存所有有下属的管理者名单,用于递归终止判断 has_subordinate = set(df['Manager Name'].unique()) def estimate_org_size(name): # 递归终止条件:当前员工没有下属,直接返回0 if name not in has_subordinate: return 0 # 提取当前员工的所有直接下属 direct_reports = df[df['Manager Name'] == name]['Full Name'].unique() # 总人数 = 直接下属人数 + 所有直接下属管辖的人数之和 total = len(direct_reports) for report in direct_reports: total += estimate_org_size(report) return total # 测试验证 print(estimate_org_size('BB')) # 输出18,符合预期 print(estimate_org_size('AA')) # 输出10 print(estimate_org_size('EE')) # 输出1 # 应用到全表每一行,新增组织人数列 df['org_size'] = df['Full Name'].apply(estimate_org_size)
内容的提问来源于stack exchange,提问作者jay queue
相关产品推荐
相关产品推荐

