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

如何将Pandas DataFrame两列直接转换为路径列表列表(规避递归限制)

解决Pandas DataFrame层级路径生成问题(避免递归深度限制)

我来帮你搞定这个需求——直接从Pandas DataFrame生成所有从根节点出发的完整层级路径,还能完美避开递归深度不够的问题,毕竟上千级的层级用递归肯定会爆栈。

问题本质拆解

你的数据其实是一个父-子节点组成的有向无环图(DAG),我们要做的就是找到从根节点Account到所有叶子节点(没有子节点的节点)的所有完整路径。递归方法之所以不行,是因为Python默认递归深度只有1000,层级上千直接触发RecursionError,所以我们改用**迭代式的深度优先搜索(DFS)**来处理。

具体实现步骤

1. 先把DataFrame转换成高效的邻接表

首先我们把Name和Includes列转换成一个简单的邻接字典,键是父节点,值是该节点的所有子节点列表,这个转换比你之前的嵌套字典方法简洁太多:

import pandas as pd

# 你的示例数据
df = pd.DataFrame({
    'Name': ['Account', 'Product Account', 'Card Account', 'Card Account', 'Token', 'Account'],
    'Includes': ['Product Account', 'Card Account', 'Plastic', 'Token', 'Token Vault', 'Savings Account']
})

# 构建邻接表:父节点 -> 子节点列表
adjacency = df.groupby('Name')['Includes'].apply(list).to_dict()

生成的邻接表是这样的,非常直观:

{
    'Account': ['Product Account', 'Savings Account'],
    'Product Account': ['Card Account'],
    'Card Account': ['Plastic', 'Token'],
    'Token': ['Token Vault']
}

2. 迭代式DFS遍历所有路径

用栈来模拟递归过程,完全避开递归深度限制,不管层级有几千级都能正常运行:

def find_all_paths(start_node, adjacency):
    paths = []
    # 栈中每个元素是(当前已走路径, 当前所在节点)
    stack = [([start_node], start_node)]
    
    while stack:
        current_path, current_node = stack.pop()
        # 如果当前节点没有子节点,说明是叶子,把这条路径加入结果
        if current_node not in adjacency:
            paths.append(current_path.copy())
            continue
        # 遍历所有子节点,注意反转顺序可以让路径输出和你的示例完全一致(可选)
        for child in reversed(adjacency[current_node]):
            new_path = current_path + [child]
            stack.append((new_path, child))
    
    return paths

# 生成所有从Account出发的路径
result = find_all_paths('Account', adjacency)
print(result)

输出结果

运行后得到的结果和你想要的完全一致:

[['Account', 'Savings Account'], ['Account', 'Product Account', 'Card Account', 'Token', 'Token Vault'], ['Account', 'Product Account', 'Card Account', 'Plastic']]

如果需要调整路径的输出顺序,只需要去掉reversed()即可,或者根据需求对子节点排序。

为什么这个方法适合大规模数据

  • 迭代式DFS用栈存储中间状态,栈是在堆内存中分配的,没有Python递归深度的限制,上千级层级也能轻松处理。
  • 邻接表的构建和遍历都是O(n)时间复杂度,性能远优于嵌套字典的转换方式。
  • 逻辑清晰,后续维护和扩展都很方便,比如如果要处理多根节点,或者加入循环检测(虽然你的场景不需要),都能快速修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:04:05