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

带非唯一索引的DataFrame按索引导出目标格式JSON的方法

处理带重复索引的DataFrame转特定格式JSON的问题

我完全理解你遇到的痛点:当DataFrame存在重复索引时,直接用df.to_json(orient='index')没法生成你想要的格式——重复索引对应的多行数据需要转为数组,唯一索引的单行数据则保持单个对象结构。

先确认下你的DataFrame结构:

import pandas as pd

df = pd.DataFrame({'city': ['POA', 'POA', 'SAN'], 'info' : [10,12,5]}, index = [4314902, 4314902, 4300803])
df.index.rename('ID_city', inplace=True)

对应的表格展示:

city  info
ID_city           
4314902  POA    10
4314902  POA    12
4300803  SAN     5

要实现你期望的JSON输出,我们可以通过按索引分组+自定义格式转换来解决,具体代码如下:

import json

# 按索引分组处理数据
result = {}
for idx, group in df.groupby(level='ID_city'):
    # 将分组内的数据转为字典列表(records格式)
    group_data = group.reset_index(drop=True).to_dict('records')
    # 单个数据时取字典,多个数据时保留列表
    result[idx] = group_data[0] if len(group_data) == 1 else group_data

# 写入JSON文件,indent=2保证格式美观易读
with open('df.json', 'w') as f:
    json.dump(result, f, indent=2)

代码逻辑说明:

  • df.groupby(level='ID_city'):按索引ID_city分组,把相同索引的行归为一组;
  • group.reset_index(drop=True).to_dict('records'):将每组数据转为字典列表,reset_index(drop=True)是为了去掉分组后的冗余索引,只保留列数据;
  • 最后通过判断分组数据的长度,决定存储单个字典还是字典列表,完美匹配你想要的输出结构。

执行这段代码后,生成的df.json内容就是你期望的:

{
  "4314902": [
    {"city": "POA", "info": 10},
    {"city": "POA", "info": 12}
  ],
  "4300803": {"city": "SAN", "info": 5}
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:53:00