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

Python/Pandas 基于父子关系表构建根节点与各function对应序列号DataFrame

实现思路

  1. 先整理全量节点和对应function的映射关系,去重避免重复计算
  2. 构建子节点到父节点的映射字典,用于快速查找任意节点的根节点
  3. 给每个节点标记对应的根节点
  4. 直接透视表即可得到目标结构

完整可运行代码

import pandas as pd
import numpy as np

# 示例输入
df = pd.DataFrame(
    [['001', '010', 'A', 'B'], ['001', '020', 'A', 'C'], ['010', '100', 'B', 'D'], ['100', '110', 'D', 'E'],
     ['002', '030', 'A', 'B'], ['002', '040', 'A', 'C']],
    columns=['parent_serialno', 'child_serialno', 'parent_function', 'child_function']
)

# 整理所有节点与对应function的映射
parent_nodes = df[['parent_serialno', 'parent_function']].rename(columns={
    'parent_serialno': 'serialno',
    'parent_function': 'function'
})
child_nodes = df[['child_serialno', 'child_function']].rename(columns={
    'child_serialno': 'serialno',
    'child_function': 'function'
})
all_nodes = pd.concat([parent_nodes, child_nodes]).drop_duplicates()

# 构建子节点→父节点的映射字典
child_to_parent = dict(zip(df['child_serialno'], df['parent_serialno']))

# 定义查找根节点的函数
def find_root(node):
    while node in child_to_parent:
        node = child_to_parent[node]
    return node

# 给每个节点标记所属根节点
all_nodes['root'] = all_nodes['serialno'].apply(find_root)

# 透视得到最终结果
result = all_nodes.pivot(index='root', columns='function', values='serialno').reset_index(drop=True)
print(result)

输出结果

A    B    C    D    E
0  001  010  020  100  110
1  002  030  040  NaN  NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:06:03