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

如何将Pandas DataFrame转换为指定层级的嵌套JSON?

嵌套JSON生成问题

给定DataFrame

import pandas as pd

data={'category':['Medical','Medical','Research','Medical','Research'], 
       'countrycode':['US','CAN','US','CAN','US'],
       'stateCode':['AK','AB','MO','NT','OK'],
       'statecount':[600,100,200,760,90]} 
df=pd.DataFrame(data)

期望生成的嵌套JSON结构

{
  "Medical" : { 
                "US" : {"AK":600,"OK":90},
                "CAN": {"AB":100, "NT":760}
               },
  "Research" : { 
                "US" : {"MO":200,"OK":90}
               }
 }

注:原示例中CAN组的AB值写为160,对应DataFrame实际值为100,已修正

尝试的代码及问题

尝试了以下代码,但无法将countrycode设置为第二层结构:

df.groupby('category').apply(lambda x: x.groupby('countrycode').apply(lambda y:y[['stateCode','statecount']]).to_json(orient='records'))

解决方法

方法一:多层分组+字典推导(新手友好)

通过逐层分组并手动构造嵌套字典,逻辑清晰易懂:

result = {}
# 第一层按大类别分组
for category, cat_group in df.groupby('category'):
    country_level = {}
    # 第二层按国家代码分组
    for country, cntry_group in cat_group.groupby('countrycode'):
        # 将州代码作为键、数量作为值,构造最内层字典
        state_level = cntry_group.set_index('stateCode')['statecount'].to_dict()
        country_level[country] = state_level
    result[category] = country_level

# 按需转换为JSON字符串
import json
json_result = json.dumps(result, indent=2)
print(json_result)

方法二:链式分组写法(简洁版)

用apply链式调用完成嵌套构造,代码更紧凑:

result = df.groupby('category').apply(
    lambda cat_group: cat_group.groupby('countrycode').apply(
        lambda cntry_group: cntry_group.set_index('stateCode')['statecount'].to_dict()
    ).to_dict()
).to_dict()

# 转JSON输出
import json
print(json.dumps(result, indent=2))

核心逻辑说明

  1. 第一层groupby('category'):将数据按Medical/Research拆分
  2. 第二层groupby('countrycode'):在每个类别下再按国家代码拆分
  3. set_index('stateCode')['statecount'].to_dict():把每个国家分组里的州代码和对应数量转成键值对字典
  4. 最后通过to_dict()把分组结果逐层转成嵌套字典,按需转成JSON字符串

这样就能生成你需要的三层嵌套结构,解决了之前无法将countrycode作为第二层的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:18:30