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

如何将Pandas DataFrame按endpoint_id分组转换为指定JSON格式?

问题描述

我有如下DataFrame:

endpoint_id   key      value     name  id  category_id  category_name
0    60       host     xx.xx.xx   SP    16       5         Database
1    60       username  dbc       SP    16       5         Database
2    60       password  dbc       SP    16       5         Database
3    61       username  abcd      SP_S3 17       6         Storage
4    61       password  wxyz      SP_S3 17       6         Storage

尝试使用to_dict('orient=records')方法后,得到单条记录独立的JSON结构,但我需要按endpoint_id分组的JSON格式,目标结构如下(修正了原示例中不符合JSON规范的details格式):

[
  {
    "endpoint_id": 60,
    "name": "SP",
    "id": 16,
    "category_id": 5,
    "category_name": "Database",
    "details": [
      {"key": "host", "value": "xx.xx.xx"},
      {"key": "username", "value": "dbc"},
      {"key": "password", "value": "dbc"}
    ]
  },
  {
    "endpoint_id": 61,
    "name": "SP_S3",
    "id": 17,
    "category_id": 6,
    "category_name": "Storage",
    "details": [
      {"key": "username", "value": "abcd"},
      {"key": "password", "value": "wxyz"}
    ]
  }
]
解决方案

可以通过groupby分组后自定义聚合逻辑实现,代码如下:

import pandas as pd
import json

# 构造示例DataFrame(如果已有数据可跳过此步)
df = pd.DataFrame({
    'endpoint_id': [60, 60, 60, 61, 61],
    'key': ['host', 'username', 'password', 'username', 'password'],
    'value': ['xx.xx.xx', 'dbc', 'dbc', 'abcd', 'wxyz'],
    'name': ['SP', 'SP', 'SP', 'SP_S3', 'SP_S3'],
    'id': [16, 16, 16, 17, 17],
    'category_id': [5, 5, 5, 6, 6],
    'category_name': ['Database', 'Database', 'Database', 'Storage', 'Storage']
})

def process_group(group):
    # 提取同组内一致的公共字段
    base_info = group[['endpoint_id', 'name', 'id', 'category_id', 'category_name']].iloc[0].to_dict()
    # 将key-value转换为details列表
    base_info['details'] = group[['key', 'value']].to_dict('records')
    return base_info

# 分组处理并转换为列表
result_list = df.groupby('endpoint_id').apply(process_group).tolist()

# 转换为格式化的JSON字符串
final_json = json.dumps(result_list, indent=2)
print(final_json)

代码说明

  1. 分组逻辑:按endpoint_id分组,同组内的name、id等字段值一致,直接取第一行数据即可。
  2. 生成details:将每组的key和value列转换为字典列表,作为details字段的值。
  3. 结果整合:将公共信息和details合并后,转成列表再序列化JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:35:12