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
相关产品推荐
相关产品推荐

