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

Python中实现DataFrame到多层嵌套字典的通用转换

将Pandas DataFrame转换为可变层级的嵌套字典结构

需求说明

给定层级化的Pandas DataFrame(示例包含region、sub_region、state三级),需要将其转换为指定格式的嵌套字典:

  • 每个节点以name字段标识
  • 非叶子节点包含children字段,子节点为下一层级的结构
  • 叶子节点(最底层)不包含children字段
  • 要求实现支持任意层级数量的通用转换逻辑

通用解决方案

以下是基于递归实现的通用转换函数,可适配任意层级的DataFrame结构:

import pandas as pd
import json

def df_to_nested_dict(df, hierarchy):
    def build_level(group, level_index):
        # 到达最后一层,返回仅含name的字典列表
        if level_index == len(hierarchy) - 1:
            return [{"name": val} for val in group[hierarchy[level_index]].unique()]
        
        # 按当前层级字段分组,递归构建子节点
        grouped_data = group.groupby(hierarchy[level_index])
        nodes = []
        for node_name, sub_group in grouped_data:
            child_nodes = build_level(sub_group, level_index + 1)
            current_node = {"name": node_name}
            # 仅当存在子节点时添加children键
            if child_nodes:
                current_node["children"] = child_nodes
            nodes.append(current_node)
        return nodes
    
    return build_level(df, 0)

# 测试示例数据
region = ['A','A','A','B','B','B']
sub_region = ['1','2','2','3','3','4']
state = ['a','b','c','d','e','f']
df = pd.DataFrame({"region": region, "sub_region": sub_region, "state": state})

# 执行转换并打印结果
result = df_to_nested_dict(df, ['region', 'sub_region', 'state'])
print(json.dumps(result, indent=2))

输出结果

运行上述代码后,将得到符合要求的嵌套字典:

[
  {
    "name": "A",
    "children": [
      {
        "name": "1",
        "children": [
          {
            "name": "a"
          }
        ]
      },
      {
        "name": "2",
        "children": [
          {
            "name": "b"
          },
          {
            "name": "c"
          }
        ]
      }
    ]
  },
  {
    "name": "B",
    "children": [
      {
        "name": "3",
        "children": [
          {
            "name": "d"
          },
          {
            "name": "e"
          }
        ]
      },
      {
        "name": "4",
        "children": [
          {
            "name": "f"
          }
        ]
      }
    ]
  }
]

函数说明

  1. 参数:
    • df:需要转换的Pandas DataFrame
    • hierarchy:层级字段的列表,按从顶层到底层的顺序排列(如['region', 'sub_region', 'state'])
  2. 核心逻辑:
    • 递归遍历每一层级,通过groupby对当前层级字段分组
    • 最后一层直接生成仅含name的字典
    • 非最后一层递归处理子分组,为节点添加children字段(仅当存在子节点时)
  3. 灵活性:
    • 可适配任意数量的层级,例如若层级为['region', 'state'],函数会自动生成二级嵌套结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:15:42