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

如何将含员工上下级层级的Pandas DataFrame转为多层嵌套树形JSON

解决方案

你需要通过自定义遍历逻辑构建嵌套树结构,再转换为JSON,无需依赖Pandas原生JSON转换能力,示例代码如下:

import pandas as pd
import json

# 假设df为你补充上级经理信息后的DataFrame,先处理空的上级ID
df = df.fillna({"MANAGER_EMPLOYEE_ID": ""})

# 1. 初始化所有员工的节点映射表,key为员工ID,value为目标结构的节点对象
emp_node_map = {}
for _, row in df.iterrows():
    emp_id = row["EMPLOYEE_ID"]
    emp_node_map[emp_id] = {
        "employeeID": emp_id,
        "name": row["NAME"],
        "reportees": []
    }

# 2. 遍历所有员工,挂载到对应上级的汇报列表中
root_nodes = []
for _, row in df.iterrows():
    emp_id = row["EMPLOYEE_ID"]
    manager_id = row["MANAGER_EMPLOYEE_ID"]
    # 无上级的节点为根节点(最高层管理者)
    if not manager_id or pd.isna(manager_id):
        root_nodes.append(emp_node_map[emp_id])
        continue
    # 有上级的节点加入上级的汇报列表
    if manager_id in emp_node_map:
        emp_node_map[manager_id]["reportees"].append(emp_node_map[emp_id])

# 3. 转换为JSON,单根节点取列表第一个元素,多根节点直接转换列表
target_json = json.dumps(
    root_nodes[0] if len(root_nodes) == 1 else root_nodes,
    ensure_ascii=False,
    indent=2
)
print(target_json)

以你补充后的DataFrame运行上述代码,输出结果如下:

{
  "employeeID": "40",
  "name": "G",
  "reportees": [
    {
      "employeeID": "42",
      "name": "S",
      "reportees": [
        {
          "employeeID": "0c",
          "name": "H",
          "reportees": []
        }
      ]
    },
    {
      "employeeID": "T",
      "name": "M",
      "reportees": []
    }
  ]
}

相关概念解释

你看到的「目标数据结构是递归的而非表格型的」表述,含义如下:

  • Pandas核心能力是处理二维表格数据,所有记录为平级关系,每行代表一条独立记录,分组、索引等操作都基于平级维度,无法原生支持深度不固定的嵌套结构
  • 你需要的树形结构属于递归结构:每个子节点和父节点的结构完全一致,嵌套层数没有固定上限(可能是2层、也可能是10层),Pandas原生方法只能处理固定层级的聚合,无法自动适配任意深度的嵌套关系,因此需要自定义逻辑完成层级构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:57:05