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

发布时间 - 2025-12-30 00:00:00    点击率:

本文介绍如何使用pandas对dataframe中指定列组合去重后,按主键(如name)聚合series值为无重复列表,并最终输出标准json兼容的字典结构。

在数据处理中,常需将扁平化的表格结构(如含重复项的Name-Series映射)转换为嵌套的键值结构——即每个唯一Name对应一个去重后的Series值列表,最终以Python字典(可直接json.dumps()序列化)形式呈现。核心步骤分为两步:去重 + 分组聚合

✅ 推荐方案:drop_duplicates() + groupby().agg(list)

最简洁高效的方式是先全局去重,再按目标列分组并聚合为列表:

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'Name': ['A', 'B', 'A', 'A', 'B'],
    'Series': ['A1', 'B1', 'A2', 'A1', 'B2']
})

# 去重后分组聚合 → 字典
result = df.drop_duplicates().groupby('Name')['Series'].agg(list).to_dict()
print(result)
# 输出: {'A': ['A1', 'A2'], 'B': ['B1', 'B2']}
⚠️ 注意:drop_duplicates() 默认对整行去重,确保 (Name, Series) 组合唯一;若DataFrame含其他无关列(如ID、时间戳),建议显式筛选关键列: result = df[['Name', 'Series']].drop_duplicates().groupby('Name')['Series'].agg(list).to_dict()

? 替代方案:groupby().agg(lambda x: x.unique().tolist())

若需保留原始分组逻辑(例如后续需同时聚合多列),可直接在agg中调用unique():

result = df.groupby('Name')['Series'].agg(lambda x: x.unique().tolist()).to_dict()

此方式不依赖前置去重,语义更明确(“每组内Series去重后转列表”),但性能略低于先全局去重再分组。

? 进阶:排序与JSON导出

如需列表按字母/数值顺序排列,可在聚合时加入sorted():

result = df.groupby('Name')['Series'].agg(
    lambda x: sorted(x.unique().tolist())
).to_dict()
# 输出: {'A': ['A1', 'A2'], 'B': ['B1', 'B2']}(已排序)

最终结果为标准Python字典,可直接用于JSON序列化:

import json
json_str = json.dumps(result, indent=2)
print(json_str)
# {
#   "A": ["A1", "A2"],
#   "B": ["B1", "B2"]
# }

✅ 总结:优先使用 df.drop_duplicates().groupby(...).agg(list).to_dict() —— 简洁、高效、可读性强;当需灵活控制每组去重逻辑或处理多列时,选用 x.unique().tolist() 方案。两者均能精准生成符合要求的嵌套JSON结构。


# python  # js  # json  # 排列 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: ,交易猫的商品怎么发布到网站上去?  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  微信小程序 canvas开发实例及注意事项  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  深圳网站制作平台,深圳市做网站好的公司有哪些?  Android 常见的图片加载框架详细介绍  音响网站制作视频教程,隆霸音响官方网站?  PythonWeb开发入门教程_Flask快速构建Web应用  公司门户网站制作流程,华为官网怎么做?  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  Python文件操作最佳实践_稳定性说明【指导】  详解Android中Activity的四大启动模式实验简述  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  高防服务器租用指南:配置选择与快速部署攻略  如何快速生成高效建站系统源代码?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  南京网站制作费用,南京远驱官方网站?  iOS发送验证码倒计时应用  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  Laravel如何处理文件下载请求?(Response示例)  如何选择PHP开源工具快速搭建网站?  PHP 500报错的快速解决方法  googleplay官方入口在哪里_Google Play官方商店快速入口指南  Python结构化数据采集_字段抽取解析【教程】  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  北京的网站制作公司有哪些,哪个视频网站最好?  如何快速建站并高效导出源代码?  Python3.6正式版新特性预览  昵图网官网入口 昵图网素材平台官方入口  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  在centOS 7安装mysql 5.7的详细教程  Laravel如何使用Gate和Policy进行授权?(权限控制)  如何自定义建站之星模板颜色并下载新样式?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何在VPS电脑上快速搭建网站?  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  如何将凡科建站内容保存为本地文件?  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  网站页面设计需要考虑到这些问题  如何在腾讯云服务器快速搭建个人网站?  用v-html解决Vue.js渲染中html标签不被解析的问题