如何用Python实现DataFrame层级节点的分组结构化输出?
Pandas层级节点DataFrame转换为分组结构化形式
问题描述
现有如下Pandas DataFrame,对应一个三级节点层级结构:
import pandas as pd # 创建数据列表 data = [ ["8582", 1, None], ["8586", 2, "8582"], ["8585", 2, "8582"], ["8593", 2, "8582"], ["8584", 2, "8582"], ["8590", 3, "8586"], ["8583", 3, "8593"], ["8597", 3, "8584"], ["8587", 3, "8585"], ["8674", 3, "8586"], ["8589", 3, "8586"], ["8588", 3, "8585"], ] # 生成DataFrame df = pd.DataFrame(data, columns=["Nod", "Levels", "Parents"])
需要将其转换为分组结构化形式:即每行包含完整的三级层级路径(Level1、Level2、Level3),清晰呈现每个Level3节点对应的所有上级节点。
解决方案
可以通过Pandas的merge方法,按层级间的父子关联关系逐步合并数据,实现目标结构:
# 筛选各层级数据并重命名列,统一关联字段 level1 = df[df['Levels'] == 1][['Nod']].rename(columns={'Nod': 'Level1'}) level2 = df[df['Levels'] == 2][['Nod', 'Parents']].rename(columns={'Nod': 'Level2', 'Parents': 'Level1'}) level3 = df[df['Levels'] == 3][['Nod', 'Parents']].rename(columns={'Nod': 'Level3', 'Parents': 'Level2'}) # 先合并Level1与Level2,得到二级层级组合 level1_level2 = pd.merge(level1, level2, on='Level1') # 再合并Level3,生成完整三级路径 result = pd.merge(level1_level2, level3, on='Level2') print(result)
代码说明
- 拆分层级数据:分别提取Level1、Level2、Level3的节点数据,将列名重命名为对应层级名称,同时把
Parents列调整为上级层级的列名,确保关联字段一致; - 逐步合并关联:先通过
Level1字段关联一级和二级节点,再通过Level2字段关联三级节点,最终得到每行包含完整三级路径的结构化数据。
输出结果
运行代码后将得到如下结构的DataFrame:
| Level1 | Level2 | Level3 |
|---|---|---|
| 8582 | 8586 | 8590 |
| 8582 | 8586 | 8674 |
| 8582 | 8586 | 8589 |
| 8582 | 8585 | 8587 |
| 8582 | 8585 | 8588 |
| 8582 | 8593 | 8583 |
| 8582 | 8584 | 8597 |
内容的提问来源于stack exchange,提问作者Gogo78
相关产品推荐
相关产品推荐

