如何将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))
核心逻辑说明
- 第一层
groupby('category'):将数据按Medical/Research拆分 - 第二层
groupby('countrycode'):在每个类别下再按国家代码拆分 set_index('stateCode')['statecount'].to_dict():把每个国家分组里的州代码和对应数量转成键值对字典- 最后通过
to_dict()把分组结果逐层转成嵌套字典,按需转成JSON字符串
这样就能生成你需要的三层嵌套结构,解决了之前无法将countrycode作为第二层的问题。
内容的提问来源于stack exchange,提问作者SpikeLee235
相关产品推荐
相关产品推荐

