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

如何将Pandas分组结果转换为Django所需的指定嵌套字典/列表结构?

Pandas多层索引聚合结果转Django可用嵌套字典

问题原因

你当前得到的dailyMinPrices是带两层索引(课程名、day_of_year)的Pandas Series:

  • 直接调用.values.tolist()只会提取Series存储的价格值,完全丢失索引里的课程、日期信息,所以只能拿到纯数字列表
  • 直接对多层索引Series调用.to_dict()会生成以(课程名, 日期)元组为键的平铺字典,不符合嵌套需求,索引存在空值时还会直接报错

另外你写的目标结构存在语法错误:字典值不能直接包裹列表用{},正确可JSON序列化的结构应该是课程名为键,对应值为记录列表,列表内每个元素是{"day_of_year": 数值, "price": 数值}格式的字典。

实现代码(无Python层显式for循环,高性能)

全程使用Pandas内置向量化方法,底层为C实现,大数据量下性能远高于手写Python循环:

# 第一步:将多层索引还原为普通DataFrame列
df_daily_min = dailyMinPrices.reset_index()

# 第二步:分组转换为目标嵌套结构
dailyMinPrices_result = (
    df_daily_min
    .groupby('course')  # 注意:你原代码里写的分组字段是'hotel',和输出结果的Course字段不匹配,替换成实际的课程名字段即可
    .apply(lambda group: group[['day_of_year', 'price']].to_dict('records'))
    .to_dict()
)

转换后结构示例

{
    "Course 1": [
        {"day_of_year": 154, "price": 70.0},
        {"day_of_year": 155, "price": 74.0},
        {"day_of_year": 156, "price": 85.0},
        {"day_of_year": 157, "price": 90.0},
        # 其余日期数据按顺序排列
    ],
    "Course 2": [
        {"day_of_year": 154, "price": 96.0},
        {"day_of_year": 155, "price": 112.0},
        # 其余日期数据
    ],
    "Course 3": [
        # 对应课程的日期、价格数据
    ]
}

该结构可以直接传入Django的JsonResponse返回,不需要额外序列化处理。

逻辑说明

  • reset_index():将原本作为索引的课程名、day_of_year字段还原为DataFrame普通列,解决多层索引导致的转字典异常问题
  • 内层to_dict('records'):Pandas内置方法,直接将每组的行数据转换为字段名:值格式的字典列表,不需要逐行遍历
  • 外层to_dict():将按课程分组后的Series转换为顶层的课程名:对应数据列表的字典结构

内容的提问来源于stack exchange,提问作者Miguel Herreros Cejas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:54:20