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

如何从含完整层级数据的Pandas DataFrame生成NetworkX有向图?

提取直接上下级关系并构建NetworkX有向图

要从包含间接层级关系的DataFrame中提取直接上下级边并构建目标NetworkX有向图,可按以下步骤操作:

1. 准备数据与导入依赖库

先导入pandas和networkx,加载原始数据后去除重复的上下级记录(原数据存在重复条目):

import pandas as pd
import networkx as nx

# 加载原始层级数据
data = pd.DataFrame({
    "manager_id": ["A", "A", "B", "A", "C", "A", "B"],
    "employee_id": ["B", "C", "C", "D", "E", "E", "E"]
})

# 去重得到所有唯一的上下级边对
unique_edges = data.drop_duplicates().values.tolist()

2. 构建包含所有层级的全量有向图

将所有去重后的上下级关系加入有向图,此时图中包含直接和间接的管理关系:

full_graph = nx.DiGraph()
full_graph.add_edges_from(unique_edges)

3. 筛选直接上下级边

对每个员工节点,遍历其所有关联的管理者,筛选出直接上级——即不存在其他关联管理者是该管理者的上级(排除间接管理的情况):

direct_edges = []

for employee in full_graph.nodes():
    # 获取当前员工的所有关联管理者
    managers = list(full_graph.predecessors(employee))
    if not managers:
        continue
    
    # 判断每个管理者是否为直接上级
    for manager in managers:
        # 检查是否存在其他管理者是当前管理者的上级(即当前管理者是间接上级)
        is_indirect = any(nx.has_path(full_graph, other_mgr, manager) 
                          for other_mgr in managers if other_mgr != manager)
        if not is_indirect:
            direct_edges.append((manager, employee))

4. 构建目标有向图

将筛选出的直接上下级边加入新的有向图,即可得到符合要求的结果:

target_graph = nx.DiGraph()
target_graph.add_edges_from(direct_edges)

# 验证结果边集
print(list(target_graph.edges()))
# 输出:[('A', 'B'), ('A', 'D'), ('B', 'C'), ('C', 'E')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:23:16