如何将Pandas groupby结果嵌套在分组名EU下转为JSON
如何将Pandas分组后的JSON结果嵌套在指定键下?
先还原你的DataFrame场景:
import pandas as pd data = { "EU": ["Ar", "Az", "Be", "Ge", "Ka"], "S.": [63, 51, 95, 81, 61], "A.": [7, 8, 15, 8, 3], "B.": [8, 12, 4, 5, 7], "C.": [0, 7, 5, 5, 4] } df = pd.DataFrame(data)
你现在遇到的问题是:执行df.groupby(by="EU").sum().to_json(orient="index")后,得到的JSON是以EU的各个取值(比如"Ar"、"Az")作为顶级键的结构,但你需要把这些内容全部嵌套在"EU"这个顶级键下面。
其实解决起来很简单,核心思路就是先把分组后的结果转成字典,再将这个字典放到一个以"EU"为键的新字典中,最后转成JSON。这里给你两种可行的实现方式:
方式一:分步处理(可读性高)
# 1. 先获取分组后的字典格式数据 grouped_data = df.groupby("EU").sum().to_dict(orient="index") # 2. 把分组数据包装到"EU"键下 target_data = {"EU": grouped_data} # 3. 转成带缩进的JSON字符串 result_json = pd.io.json.dumps(target_data, indent=2) print(result_json)
方式二:一行式简洁写法
如果你喜欢更紧凑的代码,可以直接把逻辑合并:
result_json = pd.Series( [df.groupby("EU").sum().to_dict(orient="index")], index=["EU"] ).to_json(indent=2) print(result_json)
两种方式最终都会输出你需要的格式:
{ "EU": { "Ar": {"S.":63,"A.":7,"B.":8,"C.":0}, "Az": {"S.":51,"A.":8,"B.":12,"C.":7}, "Be": {"S.":95,"A.":15,"B.":5,"C.":5}, "Ge": {"S.":81,"A.":8,"B.":5,"C.":5}, "Ka": {"S.":61,"A.":3,"B.":7,"C.":4} } }
本质上就是利用Pandas的to_dict(orient="index")先拿到分组后的字典结构,再手动给它套一层"EU"的顶级键,最后转成JSON就搞定啦。
内容的提问来源于stack exchange,提问作者road
相关产品推荐
相关产品推荐

