Pandas如何将DataFrame转换为同键对应值列表的字典
Pandas按列分组聚合为列表字典的实现方法
针对你要把相同key对应的value归集为列表、最终输出指定结构字典的需求,不需要单独用全局apply实现,以下是经过验证的可行方案:
推荐方案:原生groupby聚合(性能最优)
利用pandas内置的分组聚合能力,代码简洁且运行效率最高,适配大数据量场景:
import pandas as pd # 示例数据 df = pd.DataFrame({ 'key': [1, 1, 1, 2, 2], 'value': ['kpi1', 'kpi2', 'kpi3', 'kpi4', 'kpi5'] }) # 核心逻辑:按key分组,将每组value聚合为列表后转字典 res = df.groupby('key')['value'].agg(list).to_dict() # 把整数key转为字符串,和你给出的目标字典结构完全匹配 d = {str(k): v for k, v in res.items()}
运行后得到的d完全匹配你的预期:
{'1': ['kpi1', 'kpi2', 'kpi3'], '2': ['kpi4', 'kpi5']}
apply写法适配
你之前用apply没成功,核心原因是没有先做分组:直接对未分组的全表调用apply,无法跨行归集相同key的value值,必须配合groupby使用才能实现效果:
res = df.groupby('key')['value'].apply(list).to_dict() d = {str(k): v for k, v in res.items()}
该写法输出结果和推荐方案一致,但apply本质是逐组循环调用,性能比原生agg聚合差,数据量较大时优先选择第一种方案。
避坑提示:不要尝试在不分组的前提下用全局apply实现该需求,这类写法需要手动维护字典存储中间结果,代码冗余且运行效率极低。
内容的提问来源于stack exchange,提问作者albert cordobés
相关产品推荐
相关产品推荐

