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

如何修改Pandas分组聚合后的JSON输出结构?

解决MultiIndex Series转嵌套JSON的问题

你遇到的问题本质是MultiIndex(多级索引)的Series在默认转JSON时,会把索引元组直接序列化为字符串键,所以才出现了{"["John Doe","A"]":201.37}这种不符合预期的格式。要得到你想要的嵌套结构,只需要先调整数据结构,再转JSON即可,下面是两种简单高效的方法:

方法一:用unstack()转换结构后转JSON

这是最直接的方案,先把多级索引的Series转换成以USER为行索引、GROUP为列的DataFrame,再用orient='index'参数生成嵌套JSON:

# 假设你的聚合结果是agg_series(即df.groupby(['USER', 'GROUP'])['VALOR'].sum()的返回值)
agg_df = agg_series.unstack(level='GROUP')  # 将GROUP索引转成列
target_json = agg_df.to_json(orient='index')

执行后target_json的格式就是你想要的:

{"John Doe": {"A": 201.37, "B":480.59, "C":1504.16}, "John Jones": {"A": 239.95, "B":1123.39, "C":1736.05}}

原理说明:

  • unstack(level='GROUP'):把多级索引中的GROUP层级从行索引“拆”成列,此时数据结构变成每行对应一个用户,每列对应一个分组,单元格是求和后的值。
  • to_json(orient='index'):指定以行索引(即USER)作为外层JSON键,每行的列和值作为内层键值对,完美匹配你要的嵌套结构。

方法二:直接生成嵌套字典再转JSON

如果你更喜欢用字典操作,也可以先把Series转换成嵌套字典,再用json.dumps()序列化:

import json

# 先按USER分组,把每个用户的GROUP和VALOR转成字典,再整体转成外层字典
result_dict = agg_series.groupby(level='USER').apply(
    lambda x: x.droplevel('USER').to_dict()
).to_dict()

target_json = json.dumps(result_dict)

这个方法和方法一的效果完全一致,适合需要对字典做额外处理的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:01