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

Pandas构建深层嵌套JSON时如何对Item数组去重并正确分组

Excel转Header/Item双层嵌套JSON去重方案

问题根因

原有实现出现Item重复的核心原因是分组聚合前未对明细行做去重处理,原始Excel中的重复行被直接聚合进Item数组;同时原代码存在两处语法疏漏:

  • 生成Item字段时df[['A', 'C', 'D'].to_dict('records') 缺失右侧闭合中括号
  • 分组后取多列字段时使用单中括号data_groupedby['A','B','Item'],pandas取多列需要传入列名列表、使用双中括号。

修复实现

核心逻辑为先按Item维度的唯一键去重原始明细,再分组聚合,聚合时增加去重兜底逻辑,完整可运行代码如下:

import pandas as pd
import json

# 1. 读取Excel数据源,替换为实际文件路径
df = pd.read_excel("your_source_file.xlsx")

# 2. 按Item维度的唯一判定字段去重,从源头删除重复行,保留第一条记录
# 若去重规则变化,修改subset内的字段名即可
df_dedup = df.drop_duplicates(subset=["A", "C", "D"], keep="first").reset_index(drop=True)

# 3. 生成Item层级的字典结构
df_dedup["Item"] = df_dedup[["A", "C", "D"]].to_dict("records")

# 4. 自定义聚合函数,对Item列表做二次去重兜底
def dedup_items(item_list):
    # 字典不可哈希,转为可哈希的元组结构完成去重后再转回字典
    return list({tuple(sorted(item.items())): item for item in item_list}.values())

# 5. 按Header维度(A、B字段)分组聚合
data_grouped = df_dedup.groupby(["A", "B"], as_index=False).agg({
    "Item": dedup_items
})

# 6. 输出格式化JSON,ensure_ascii=False避免中文乱码
result = json.dumps(data_grouped.to_dict("records"), indent=2, ensure_ascii=False)
print(result)

最终输出效果

运行代码后将得到无重复Item的符合预期的嵌套结构:

[
  {
    "A": 100,
    "B": "Test1",
    "Item": [
      {
        "A": 100,
        "C": "XX10",
        "D": "L"
      },
      {
        "A": 100,
        "C": "XX20",
        "D": "L"
      }
    ]
  },
  {
    "A": 101,
    "B": "Test2",
    "Item": [
      {
        "A": 101,
        "C": "XX10",
        "D": "L"
      },
      {
        "A": 101,
        "C": "XX20",
        "D": "L"
      }
    ]
  }
]

可选调整

  • 若需要将Header抽为独立嵌套层级,可在分组完成后新增一行代码:data_grouped["Header"] = data_grouped[["A", "B"]].to_dict("records"),再调整最终输出的字段选取顺序即可
  • 若业务中Item的重复判定规则有变化,仅需修改drop_duplicates的subset参数,传入对应字段名即可
  • 若不需要格式化输出,可直接使用data_grouped.to_json(orient='records', force_ascii=False)获取JSON字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:48:09