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

使用pandas将CSV读取的DataFrame按索引列转为目标嵌套字典

Pandas DataFrame 转指定嵌套字典实现方案

你不需要单独依赖set_index()实现这个转换,以下两种方案都可以满足需求:

方案1:完全匹配你给出的期望输出格式

核心逻辑是先按indexes列分组,逐组将每行的X、Y值拼接为单键值对字典,再汇总为对应键的列表值,代码如下:

import pandas as pd

# 你已有的CSV读取逻辑
df = pd.read_csv("my_file.csv")

target_dict = {}
# 按indexes列分组,sort=False保留原表中index的出现顺序
for group_key, group_df in df.groupby("indexes", sort=False):
    # 逐行生成{X_values: Y_values}格式的字典,收集为列表
    kv_pairs = [{row["X_values"]: row["Y_values"]} for _, row in group_df.iterrows()]
    target_dict[group_key] = kv_pairs

运行后输出的结构和你给出的示例完全一致:

{
    "IDX1" : [{"x1": "y1"}, {"x2": "y2"}, {"x3": "y3"}, {"x4": "y4"}],
    "IDX2": [{"x1": "y1"},{"x4": "y4"}],
    "IDX3":[{"x1": "y1"}, {"x2": "y2"}]
}

方案2:更简洁的替代嵌套结构

如果不强制要求每个X-Y键值对单独封装为字典,可以用更精简的代码生成少一层嵌套的结构,后续取值效率更高:

# 输出结构:{index值: {x1:y1, x2:y2, ...}}
target_dict_alt = df.groupby("indexes", sort=False).apply(
    lambda x: dict(zip(x["X_values"], x["Y_values"]))
).to_dict()

该结构输出如下,取值时不需要遍历列表,直接通过target_dict_alt["IDX1"]["x1"]即可拿到对应y值,日常使用更方便:

{
    "IDX1": {"x1": "y1", "x2": "y2", "x3": "y3", "x4": "y4"},
    "IDX2": {"x1": "y1", "x4": "y4"},
    "IDX3": {"x1": "y1", "x2": "y2"}
}

说明:你之前单独用set_index()无法实现需求的原因是,该方法仅会将指定列设置为行索引,不会自动完成同索引行的分组聚合、行数据转字典的逻辑,必须配合分组操作才能收拢同一index对应的多行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:33:11