首页 > 解决方案 > 熊猫认识老板的员工

问题描述

是否可以使用熊猫通过给定表提取员工的层次结构?

例如我们有这张桌子

+-------+--------+
| empID | bossID |
+-------+--------+
| a1    | b2     |
| a2    | a1     |
| c1    | a2     |
| d2    | a2     |
| a4    | aa     |
+-------+--------+

bossID 列上的员工 b2 在 empID 列上有员工 a1。BossID 上的 a1 有一个员工 e1,

所以预期的结果是[b2,a1,a2,c1,d2]

目前,我只能检索 1 层。

details = df[('bossID') == "b2"]
details = df['empID'].tolist()
details = list(set(details))
print(details) # ['b2','a1']

但事实证明更深入是很困难的。我尝试将它放在一个函数上并尝试递归,但它没有成功。

maximum recursion depth exceeded in __instancecheck__

任何帮助表示赞赏。

标签: pandasrecursion

解决方案


这看起来像一个网络问题,所以我们使用networkx

import networkx as nx

G=nx.from_pandas_edgelist(df, 'empID', 'bossID')
l=list(nx.connected_components(G))
l
Out[184]: [{'a1', 'a2', 'b2', 'c1', 'd2'}, {'a4', 'aa'}]

推荐阅读