如何在Python中去重并按分组转换为JSON字典结构

7次阅读

如何在 Python 中去重并按分组转换为 JSON 字典结构

本文介绍如何使用 pandas 对 dataframe 按某一列(如 name)分组,先去除重复项,再将另一列(如 series)聚合为无重复列表,最终输出符合 json 格式的嵌套字典。

在数据处理中,常需将扁平化的表格结构(如含重复组合的 Name-Series 关系)转换为层次化键值结构:以 Name 为键、对应去重后的 Series 值列表为值。这本质上是「分组→去重→聚合→序列化」四步操作。

最简洁高效的方式是结合 drop_duplicates() 与 groupby().agg(list):

import pandas as pd  # 示例数据 df = pd.DataFrame({'Name': ['A', 'B', 'A', 'A', 'B'],     'Series': ['A1', 'B1', 'A2', 'A1', 'B2'] })  # 方案 1:先全局去重,再分组聚合(推荐)result = df.drop_duplicates().groupby('Name')['Series'].agg(list).to_dict() print(result) # 输出: {'A': ['A1', 'A2'], 'B': ['B1', 'B2']}

该方案逻辑清晰:drop_duplicates() 移除所有完全重复行(避免同一 Name-Series 多次出现),再通过 groupby(‘Name’)[‘Series’].agg(list) 将每个 Name 下的 Series 值聚合成列表,最后用 .to_dict() 转为标准 Python 字典——天然兼容 json.dumps()。

若需保留原始顺序但仅去重(不依赖全局去重),可改用 unique():

立即学习 Python 免费学习笔记(深入)”;

# 方案 2:分组内去重(保持首次出现顺序)result = df.groupby('Name')['Series'].agg(lambda x: x.unique().tolist()).to_dict()

⚠️ 注意事项:

  • 若 DataFrame 含多余列(如 ID、Timestamp),务必先用 df[[‘Name’, ‘Series’]] 显式选取目标列,避免 drop_duplicates() 因其他列差异误删有效组合;
  • 如需结果中列表按字母或数值排序,可在聚合时嵌入 sorted():
    result = df.groupby('Name')['Series'].agg(lambda x: sorted(x.unique().tolist()) ).to_dict()
  • 最终字典可直接用于 JSON 序列化:import json; json_str = json.dumps(result, indent=2)

此方法兼顾性能与可读性,适用于中等规模数据(百万行内),且无需额外依赖,是 Pandas 生态中的标准实践。

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-29发表,共计1134字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources