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

Pandas MultiIndex DataFrame转换为指定嵌套JSON的实现方法

Pandas MultiIndex DataFrame 转三层嵌套JSON方案

1. 原生方法支持说明

Pandas 内置的df.to_json()没有提供直接对应这个嵌套结构的orient参数。默认使用orient='index'时,会将多层索引的组合键序列化为字符串格式的元组(例如"('2022-01-21', 'SF1_8-1')"作为单个顶层键),无法自动按索引层级拆分生成嵌套结构。

2. 代码实现

核心思路是先按第一层索引(日期)分组构造嵌套字典,再序列化为JSON,逻辑稳定,可直接复用。

第一步:构造测试样例(实际使用替换为自有DataFrame即可)

import pandas as pd
import json

# 匹配场景的MultiIndex DataFrame样例
df = pd.DataFrame(
    data=[
        [100, 0.5, "A"],
        [200, 0.8, "B"],
        [150, 0.6, "C"]
    ],
    index=pd.MultiIndex.from_tuples(
        [
            ("2022-01-21", "SF1_8-1"),
            ("2022-01-21", "SF1_8-2"),
            ("2022-01-22", "SF1_8-1")
        ],
        names=["date", "code"]
    ),
    columns=["value1", "value2", "category"]
)

第二步:核心转换逻辑(鲁棒版,无单条记录报错问题)

用groupby按第一层索引切分数据,避免单分组下只有1行时触发的Series类型报错:

nested_result = {}
# 按第一层日期索引分组
for date_key, group_df in df.groupby(level=0):
    # 移除已经分组的第一层索引,剩余二级索引直接转为「索引值: 行字段字典」的映射
    nested_result[date_key] = group_df.droplevel(0).to_dict(orient='index')

# 序列化为JSON字符串,ensure_ascii=False支持中文,indent设置格式化缩进
json_output = json.dumps(nested_result, ensure_ascii=False, indent=2)

输出结构示例

生成的JSON完全匹配三层嵌套要求:

{
  "2022-01-21": {
    "SF1_8-1": {
      "value1": 100,
      "value2": 0.5,
      "category": "A"
    },
    "SF1_8-2": {
      "value1": 200,
      "value2": 0.8,
      "category": "B"
    }
  },
  "2022-01-22": {
    "SF1_8-1": {
      "value1": 150,
      "value2": 0.6,
      "category": "C"
    }
  }
}

简洁写法(字典推导式版)

不需要额外处理边界的话,可以直接用一行推导式生成嵌套字典:

nested_result = {
    date_key: group_df.droplevel(0).to_dict(orient='index')
    for date_key, group_df in df.groupby(level=0)
}
json_output = json.dumps(nested_result, ensure_ascii=False, indent=2)

补充说明:如果第一层索引是datetime类型,需要自定义日期格式的话,可以在遍历分组时手动格式化键值,例如date_key.strftime('%Y-%m-%d')即可输出指定格式的日期字符串。如果索引层级超过2层,按相同逻辑逐层分组嵌套即可扩展。

内容的提问来源于stack exchange,提问作者It's Me

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:27:31