Pandas如何从字典列表创建DataFrame并动态对齐月度item数据
Pandas实现保单条目与月度数据动态匹配方案
实现逻辑
核心是将每个月份的条目与数值映射为以条目名为索引的序列,再按索引做全外连接拼接,条目不存在的月份自动填充NaN,新增月份无需修改核心处理代码,可自动适配。
完整实现代码
import pandas as pd # 原始数据集,后续新增月份直接按相同结构往列表追加字典即可 collection = [{'item': ['Policy Master 1-2022-2023-P0003 - 5 Days - Plan 3', 'Policy Master 2-2022-2023-P0009 - 5 Days - Plan 3', 'Policy Master 3-2022-2023-P0012 - 5 Days - Plan 3', 'Policy Master 1-2022-2023-P0003 - 5 Days - Plan 2', 'Policy Master 2-2022-2023-P0009 - 5 Days - Plan 2'], 'Mar': [2800.0, 600.0, 600.0, 1000.0, 200.0]}, {'item': ['Policy Master 1-2022-2023-P0003 - 5 Days - Plan 3', 'Policy Master 2-2022-2023-P0009 - 5 Days - Plan 3', 'Policy Master 3-2022-2023-P0012 - 5 Days - Plan 3', 'Policy Master 1-2022-2023-P0003 - 5 Days - Plan 2'], 'Jun': [2800.0, 600.0, 600.0, 1000.0]}] series_container = [] for block in collection: items = block['item'] # 自动识别当前块内所有月份字段,兼容单块存多个月份数据的场景 for month, values in block.items(): if month == 'item': continue series_container.append(pd.Series(values, index=items, name=month)) # 按条目名拼接所有月份数据,匹配不上的位置自动填充NaN result = pd.concat(series_container, axis=1) # 可选:将索引转为普通数据列,适配常规表格导出/展示需求 result = result.reset_index().rename(columns={'index': 'item'})
效果说明
- 处理后
Policy Master 2-2022-2023-P0009 - 5 Days - Plan 2条目在Jun列会自动显示为NaN,完全符合匹配规则 - 新增月份数据时,只要保持和现有数据相同的字典结构追加到
collection列表即可,不需要调整核心处理逻辑,自动适配所有新增月份 - 如需将
NaN替换为其他占位值(比如0),追加一行result = result.fillna(0)即可按需调整
内容的提问来源于stack exchange,提问作者ramit_acube
相关产品推荐
相关产品推荐

