如何从DataFrame生成保留重复索引全值的字典及最优实现方案
解决DataFrame转字典时保留重复索引对应所有值的问题
嘿,我明白你的需求了——你想把DataFrame转换成字典,让重复的键(A列的值)对应所有匹配的B列值组成的列表,而不是像df.set_index('A').to_dict('list')那样只保留最后一个值对吧?
最优实现方式
最简洁高效的方法是利用pandas的groupby功能,它专门用来处理分组聚合的场景,而且内部做了性能优化,比手动循环快很多:
先构造你的示例DataFrame:
import pandas as pd df = pd.DataFrame({ 'A': [1, 1, 2, 2, 2], 'B': [1, 2, 3, 4, 5] })
然后执行这行代码就能得到你想要的字典:
result_dict = df.groupby('A')['B'].apply(list).to_dict()
执行后result_dict就是:{1: [1, 2], 2: [3, 4, 5]}
原理解释
groupby('A'):按A列的每个唯一值分组,把相同A值的行归为一组['B'].apply(list):对每个分组里的B列数据,转换成列表形式.to_dict():把分组后的Series直接转换成字典,键是A列的唯一值,值是对应B列的列表
备选方法(适合小数据集)
如果你的数据集很小,也可以用Python标准库的defaultdict手动循环实现,但性能不如groupby(尤其是大数据量时):
from collections import defaultdict result = defaultdict(list) for a, b in zip(df['A'], df['B']): result[a].append(b) # 转成普通字典(可选) result_dict = dict(result)
但还是更推荐groupby的方式,因为它既简洁又高效,完全符合pandas的惯用写法,可读性也更强。
内容的提问来源于stack exchange,提问作者sgaseretto
相关产品推荐
相关产品推荐

