如何从pandas DataFrame中提取用户所有可能的行程路径
实现方案
核心逻辑
你需要提取的是有向图中所有不包含重复节点的简单路径(若允许节点重复会生成无限长路径,匹配你给出的示例输出规则),整体流程分为三步:
- 将边数据转换为邻接表存储
- 用深度优先搜索遍历所有起点,递归扩展所有合法路径
- 收集所有路径后可直接转换为表格格式
完整代码
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
相关产品推荐
相关产品推荐

