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

如何将Pandas DataFrame按laterality列转换为嵌套JSON?

问题描述

我有一个Python Pandas DataFrame,需要根据laterality列的条目将其转换为嵌套JSON。

我的DataFrame如下:

import pandas as pd

df1 = pd.DataFrame({'id': [1, 1, 1, 2],
                   'laterality': ['L', 'L', 'R', 'R'],
                   'image': ['im1', 'im2', 'im3', 'im4'],
                   'number': [5, 5, 5, 6] })

期望的JSON输出为:

[
  {
    "id": 1,
    "number": 5,
    "images L": ["im1", "im2"],
    "images R": ["im3"]    
  },
  {
    "id": 2,
    "number": 6,
    "images R": ["im4"]    
  }
]

我尝试的方法:
我尝试使用.to_dict()方法对记录进行分组,但尚未解决问题,代码如下:

json1 = (df1.groupby(['id','number'])
       .apply(lambda x: x[['laterality','image']].to_dict('records'))
       .reset_index()
       .rename(columns={0:'image'})
       .to_json(orient='records'))

参考过的相关主题:

  • 更Python化的方式从元组列表格式化JSON字符串
  • 将Pandas DataFrame转换为嵌套JSON
  • 将Pandas DataFrame转换为JSON格式

解决方案

可以通过分组后对laterality和image进行二次聚合,再将结果整理成目标格式,代码如下:

import pandas as pd
import json

# 定义分组后的处理逻辑
def process_group(group):
    # 按laterality分组,收集对应image列表
    lateral_image_map = group.groupby('laterality')['image'].apply(list).to_dict()
    # 转换为目标键名格式
    image_fields = {f"images {k}": v for k, v in lateral_image_map.items()}
    # 组合id、number和图片字段
    return {
        'id': group['id'].iloc[0],
        'number': group['number'].iloc[0],
        **image_fields
    }

# 执行分组处理并转为JSON
result_list = df1.groupby(['id', 'number'], as_index=False).apply(process_group).tolist()
json_result = json.dumps(result_list, indent=2)

print(json_result)

逻辑说明

  1. 外层按id和number分组,确保每个组对应目标JSON中的一个独立对象;
  2. 对内层每组数据,再次按laterality分组,将同侧的image聚合为列表;
  3. 将聚合得到的字典键名转换为"images L"这类目标格式,再补充id和number字段;
  4. 最后将处理后的结果转为列表,用json.dumps格式化输出。

也可以用更简洁的链式写法实现:

json_result = json.dumps(
    df1.groupby(['id', 'number'])
       .apply(lambda g: {
           'id': g.name[0],
           'number': g.name[1],
           **{f"images {k}": v for k, v in g.groupby('laterality')['image'].apply(list).items()}
       })
       .tolist(),
    indent=2
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:55:57