如何使用pandas按字段聚合并将DataFrame转为指定嵌套结构JSON
Pandas实现分组聚合生成指定结构JSON的方法
实现步骤
- 导入依赖、构造示例DataFrame
import pandas as pd import json # 构造示例数据 df = pd.DataFrame({ "lat": [0, 0, 1, 1], "long": [2, 2, 3, 3], "city": ["rio", "rio", "sp", "sp"], "nameDisease": ["Dengue", "Chicungunha", "Dengue", "COVID"], "numberCases": [1, 2, 3, 4] })
- 按
lat/long/city三个字段分组,聚合生成diseases数组
核心逻辑是对分组后的每组数据,提取疾病名称、病例数两列,直接转换为字典列表作为diseases字段的值:
- 按
# 分组聚合 agg_df = df.groupby(["lat", "long", "city"]).apply( lambda group: group[["nameDisease", "numberCases"]].to_dict("records") ).reset_index(name="diseases")
- 转换为目标格式JSON
将聚合后的DataFrame转为记录式字典列表,再序列化为JSON字符串即可:
- 转换为目标格式JSON
# 生成最终JSON final_json = json.dumps(agg_df.to_dict("records"), ensure_ascii=False) # 打印验证结果 print(final_json)
输出结果
运行后得到的JSON结构和需求完全匹配(修正了需求示例中缺失的括号语法错误):
[{"lat":0,"long":2,"city":"rio","diseases":[{"nameDisease":"Dengue","numberCases":1},{"nameDisease":"Chicungunha","numberCases":2}]},{"lat":1,"long":3,"city":"sp","diseases":[{"nameDisease":"Dengue","numberCases":3},{"nameDisease":"COVID","numberCases":4}]}]
关键说明
- 分组时传入三个字段作为分组键,保证经纬度、城市完全一致的行才会被聚合到同一组
to_dict("records")方法可以直接把DataFrame行转为{列名:值}格式的字典,不需要手动遍历拼接,执行效率更高- 序列化JSON时传入
ensure_ascii=False可以避免中文/特殊字符被转义为Unicode编码,数据全为英文时可省略该参数
内容的提问来源于stack exchange,提问作者Bernard Reznik
相关产品推荐
相关产品推荐

