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

Pythonic方式实现Pandas DataFrame转指定格式JSON

Pandas DataFrame转嵌套JSON的Pythonic实现

假设你的目标嵌套结构是按userId聚合,每个用户下包含多次visit记录,每次visit包含总阅读时长及该次访问的书籍列表(如示例JSON结构),可以用Pandas的groupby+apply链式操作实现,完全避免手动嵌套循环:

示例数据与目标结构

输入DataFrame

import pandas as pd

df = pd.DataFrame({
    'userId': ['u1', 'u1', 'u2'],
    'visitId': ['v1', 'v1', 'v2'],
    'readingTime': [30, 20, 45],
    'Books': ['Python入门', '数据分析实战', '机器学习'],
    'BookType': ['编程', '编程', 'AI']
})

目标嵌套JSON结构

[
  {
    "userId": "u1",
    "visits": [
      {
        "visitId": "v1",
        "totalReadingTime": 50,
        "books": [
          {"bookName": "Python入门", "bookType": "编程", "readingTime": 30},
          {"bookName": "数据分析实战", "bookType": "编程", "readingTime": 20}
        ]
      }
    ]
  },
  {
    "userId": "u2",
    "visits": [
      {
        "visitId": "v2",
        "totalReadingTime": 45,
        "books": [
          {"bookName": "机器学习", "bookType": "AI", "readingTime": 45}
        ]
      }
    ]
  }
]

实现代码

import pandas as pd
import json

# 处理单条visit的逻辑
def process_single_visit(visit_group):
    return {
        "visitId": visit_group["visitId"].iloc[0],
        "totalReadingTime": visit_group["readingTime"].sum(),
        "books": visit_group.apply(
            lambda row: {
                "bookName": row["Books"],
                "bookType": row["BookType"],
                "readingTime": row["readingTime"]
            }, axis=1
        ).tolist()
    }

# 分层聚合生成嵌套结构
nested_data = (
    df.groupby("userId", as_index=False)
    .apply(
        lambda user_group: {
            "userId": user_group["userId"].iloc[0],
            "visits": user_group.groupby("visitId").apply(process_single_visit).tolist()
        },
        include_groups=False  # Pandas 2.0+ 参数,避免分组键混入结果
    )
    .tolist()
)

# 转为格式化JSON
json_result = json.dumps(nested_data, ensure_ascii=False, indent=2)
print(json_result)

关键说明

  1. 分层分组:先按userId聚合用户级数据,再在每个用户组内按visitId聚合单次访问数据,完全利用Pandas的分组能力替代手动循环。
  2. 自定义处理函数:process_single_visit负责将单组visit数据转换为目标嵌套结构,包括计算总阅读时长、生成书籍列表。
  3. 版本适配:include_groups=False是Pandas 2.0+新增参数,符合你使用的2.1.4版本,确保分组键不会额外出现在结果中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:52:20