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

如何从pandas DataFrame中提取用户所有可能的行程路径

实现方案

核心逻辑

你需要提取的是有向图中所有不包含重复节点的简单路径(若允许节点重复会生成无限长路径,匹配你给出的示例输出规则),整体流程分为三步:

  1. 将边数据转换为邻接表存储
  2. 用深度优先搜索遍历所有起点,递归扩展所有合法路径
  3. 收集所有路径后可直接转换为表格格式

完整代码

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'From': ['A','B','C','A','C','D','E'], 
    'To':['B','C','A','C','D','E','C'], 
    'User':[1,1,1,1,1,1,1]
})

# 1. 构建邻接表
adj = {}
for _, row in df.iterrows():
    if row['From'] not in adj:
        adj[row['From']] = []
    adj[row['From']].append(row['To'])
# 补全所有节点的邻接表
all_nodes = set(df['From']).union(set(df['To']))
for node in all_nodes:
    if node not in adj:
        adj[node] = []

# 2. DFS遍历所有简单路径
paths = []
def dfs(current_path):
    # 记录当前路径
    paths.append(current_path.copy())
    last_node = current_path[-1]
    # 遍历后继节点,未出现在当前路径则继续扩展
    for next_node in adj[last_node]:
        if next_node not in current_path:
            current_path.append(next_node)
            dfs(current_path)
            current_path.pop()

# 遍历所有节点作为路径起点
for start in all_nodes:
    dfs([start])

# 3. 输出结果/转换为表格
print("所有行程:", paths)
# 转成表格,每一行对应一条行程,缺失值填充为NaN
path_df = pd.DataFrame(paths)
print("表格格式结果:\n", path_df)

说明

  • 如果你已经构建好了图结构,直接替换代码中的adj邻接表变量即可,无需重新从DataFrame生成
  • 若需要限制路径的最大长度,可在DFS函数中加入长度判断条件,比如len(current_path) >= 3时停止扩展

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:39:03