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

Python中如何从pandas DataFrame获取networkx图的根节点分支路径列表

实现方案

你可以通过networkx直接实现需求,代码逻辑简单易维护,具体步骤如下:

方案1:基于networkx实现(推荐)

你已经用到了networkx绘制网络图,可以直接复用已构建的图结构完成路径提取:

import pandas as pd
import networkx as nx

# 1. 构建有向图
G = nx.from_pandas_edgelist(df, source='From', target='To', create_using=nx.DiGraph())

# 2. 筛选所有叶子节点(出度为0,没有下游节点的节点)
leaf_nodes = [node for node, out_degree in G.out_degree() if out_degree == 0]

# 3. 提取从Node1到所有叶子节点的路径
result = []
for leaf in leaf_nodes:
    # 取两点之间的唯一简单路径
    path = next(nx.all_simple_paths(G, source='Node1', target=leaf))
    result.append('-'.join(path))

print(result)

运行输出结果:

['Node1-Node2-Node4-Node8', 'Node1-Node2-Node5-Node9', 'Node1-Node3-Node6-Node10', 'Node1-Node3-Node7-Node11']

方案2:纯Python递归实现(无需额外依赖)

如果你不想引入networkx依赖,可以直接基于pandas生成邻接表后递归遍历:

import pandas as pd

# 1. 构建节点邻接表
adj_table = df.groupby('From')['To'].apply(list).to_dict()
result = []

# 2. 递归遍历路径
def dfs(node, current_path):
    current_path.append(node)
    # 当前节点没有下游节点,即为路径终点
    if node not in adj_table:
        result.append('-'.join(current_path))
        return
    # 遍历所有下游节点继续递归
    for next_node in adj_table[node]:
        dfs(next_node, current_path.copy())

dfs('Node1', [])
print(result)

运行结果和方案1完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:27:03