pandas - 熊猫认识老板的员工
问题描述
是否可以使用熊猫通过给定表提取员工的层次结构?
例如我们有这张桌子
+-------+--------+
| 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__
任何帮助表示赞赏。
解决方案
这看起来像一个网络问题,所以我们使用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'}]
推荐阅读
- java - Android:x天后获取日期
- r - 提取每个 id -R 的特定评论之前的所有行
- python - 有一种快速的方法可以知道 Anaconda 中是否安装了软件包
- python - 改变数据框的形状
- angular - 为什么没有输入对我的 http.get 的响应?
- java - 在 Java ThreadPoolExecutor 中在运行时更改线程池大小
- python-3.x - 当条件满足时,有什么方法可以从另一个 python 脚本运行 pyinstaller 命令?
- javascript - 有没有办法用 puppeteer 截取屏幕截图并自动显示在 html 页面上,而不是保存到我的电脑上?
- linux - 使用 Bash 从简单的 linux 脚本编辑变量
- go - 在节奏工作流的循环内调用相同的活动