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

Pandas如何将DataFrame转换为按年份分组的字典列表

问题场景

现有如下Pandas DataFrame:

import pandas as pd
df = pd.DataFrame({
    "year":[2020,2020,2020,2021,2021,2021,2022,2022, 2022],
    "region":['europe','USA','africa','europe','USA','africa','europe','USA','africa'],
    'volume':[1,6,5,3,8,7,6,3,5]
})

数据预览:
原始数据示例

需求是把这个DataFrame转为字典列表,规则如下:

  • 每个字典对应一个年份,year字段仅出现一次
  • 字典里以地区名作为键,对应当年该地区的volume值作为值
    期望输出结构:
[{'year':2020,'europe':1,'USA':6,'africa':5}, ...]

直接运行df.set_index('year').to_dict('records')会丢失年份字段,无法得到预期结构。

解决方案

你之前的写法缺了两个关键步骤:一是没有把行存储的地区值透视为列,二是set_index后直接转records不会把索引作为字典字段保留。
直接先做长表转宽表的透视,再重置索引把year变回普通列,最后转records即可,代码如下:

result = df.pivot(
    index='year',
    columns='region',
    values='volume'
).reset_index().to_dict('records')

运行后输出结果完全符合要求:

[
    {'year': 2020, 'USA': 6, 'africa': 5, 'europe': 1},
    {'year': 2021, 'USA': 8, 'africa': 7, 'europe': 3},
    {'year': 2022, 'USA': 3, 'africa': 5, 'europe': 6}
]

注:Python 3.7+字典会保留插入顺序,如果需要和示例完全一致的键排序,可以在转字典前手动指定列顺序。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:39:14