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

如何在Spark或SQL中基于父子关系构建层级DataFrame/表?

需求:将树形结构DataFrame转换为层级表

我有一个包含完整树形数据的DataFrame,所有子节点都能在父节点列中找到,每个节点均带有子节点。层级关系明确:

  • 顶层节点:1000584
  • 1级节点:4003773
  • 2级节点:1252665
  • 3级节点:1321212

现有数据为父子节点对格式,需要将其转换为按层级列展示的表格(每一列对应一个层级)。


解决方案

1. 模拟原始数据(匹配你的父子节点结构)

假设原始DataFrame包含parent_id和child_id两列,先模拟示例数据:

import pandas as pd

# 模拟你的原始父子节点数据
data = [
    [1000584, 4003773],
    [4003773, 1252665],
    [1252665, 1321212],
    # 可添加更多节点对扩展结构
    [1000584, 4003774],
    [4003774, 1252666]
]

df = pd.DataFrame(data, columns=['parent_id', 'child_id'])

2. 递归遍历生成层级表

通过递归函数从顶层节点开始,逐层遍历子节点,构建层级路径:

def build_hierarchy(df, top_node, total_levels):
    hierarchy = []
    
    def traverse(current_node, current_depth, path):
        # 达到指定层级时,保存当前路径
        if current_depth == total_levels:
            hierarchy.append(path.copy())
            return
        # 获取当前节点的所有子节点
        children = df[df['parent_id'] == current_node]['child_id'].tolist()
        for child in children:
            path.append(child)
            traverse(child, current_depth + 1, path)
            path.pop()
    
    # 从顶层节点启动遍历,初始路径包含顶层节点
    traverse(top_node, 1, [top_node])
    # 转换为DataFrame并设置列名
    result_df = pd.DataFrame(hierarchy, columns=[f'Level {i}' for i in range(total_levels)])
    return result_df

# 生成4层层级表(对应你的顶层到3级节点)
final_df = build_hierarchy(df, top_node=1000584, total_levels=4)
print(final_df)

3. 输出结果示例

运行代码后将得到符合预期的层级表:

Level 0Level 1Level 2Level 3
1000584400377312526651321212
100058440037741252666NaN

如果你的数据有更多层级,只需调整total_levels参数即可。若需要包含节点名称等额外信息,可在遍历过程中同步收集对应字段扩展路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:15:50