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

如何将Pandas DataFrame转换为指定嵌套结构的JSON格式

Pandas DataFrame转换为指定嵌套结构JSON的实现方案

你需要的嵌套结构本质是按指定列顺序逐层分组,最后一层聚合对应值为列表,Pandas原生to_dict方法没有直接支持该场景的参数,可通过分组配合自定义嵌套逻辑实现,以下是两种可行方案:

方案1:通用递归实现(适配动态列场景)

该方案不需要硬编码列名,只要调整nest_level_cols的列顺序就能生成对应层级的嵌套结构,适配性更强:

import pandas as pd

data = {
    'alt' : ["BeattheBeachmark NEW", "BeattheBeachmark NEW"],
    'Mod' : ["GA", "GA"],
    'Pers' : ["Movment", "Movment"],
    'Vie' : ["Inprogress", "Inprogress"],
    'Actions' : ["Clear", "Add"]
}
df = pd.DataFrame(data)

# 定义嵌套层级的列顺序(从前到后对应嵌套从外到内),最后一列为值列
nest_level_cols = df.columns[:-1].tolist()
value_col = df.columns[-1]

def generate_nested(group_df, level_cols, val_col):
    current_level = level_cols[0]
    # 递归到最后一层时直接聚合值为列表
    if len(level_cols) == 1:
        return {
            current_level: group_df.groupby(current_level, sort=False)[val_col].apply(list).to_dict()
        }
    # 非最后一层递归生成下一级嵌套
    nested_dict = {}
    for group_val, sub_df in group_df.groupby(current_level, sort=False):
        nested_dict[group_val] = generate_nested(sub_df, level_cols[1:], val_col)
    return {current_level: nested_dict}

result = generate_nested(df, nest_level_cols, value_col)

方案2:硬编码层级实现(适配固定列场景)

如果你的列数量和顺序永远固定,可以直接用多层推导式实现,逻辑更直观:

result = {
    "alt": {
        alt_val: {
            "Mod": {
                mod_val: {
                    "Pers": {
                        pers_val: {
                            "Vie": {
                                vie_val: {
                                    "Actions": sub_df["Actions"].tolist()
                                }
                            }
                        } for pers_val, sub_df in mod_group.groupby("Pers", sort=False)
                    }
                } for mod_val, mod_group in alt_group.groupby("Mod", sort=False)
            }
        } for alt_val, alt_group in df.groupby("alt", sort=False)
    }
}

注意事项

  • 代码中sort=False用于保证分组后的键顺序和原始数据中出现的顺序一致,若需要按键的字典序排序,删除该参数即可。
  • 若最后一列的聚合结果需要去重,可将.tolist()替换为.unique().tolist()。
  • 生成的result可以直接用json.dumps(result)转换为标准JSON字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:06:04