如何高效将含重复键的Pandas DataFrame转换为值为列表的字典?
优化Pandas DataFrame转字典的高效方法
你的问题核心是避免用Python循环遍历大数据量的DataFrame——原代码里每次通过布尔索引df[df["keys"] == k]筛选数据,本质是重复遍历整个DataFrame,40万行的情况下会产生大量冗余计算,导致速度极慢。
直接用Pandas内置的groupby+apply+to_dict就能高效解决,这是矢量化操作,底层用C实现,效率比循环高几个数量级:
# 注意:如果你的DataFrame列名是示例里的"key"就用'key',如果是代码里的"keys"就替换成'keys' my_dict = df.groupby('key')['value'].apply(list).to_dict()
执行后得到的结果完全符合你的需求:
{'a': [1, 2], 'b': [4]}
补充说明:
groupby('key')会按key列的唯一值分组,把相同key的value聚合到一组apply(list)把每组的value转换成列表to_dict()直接把分组后的Series转成目标字典格式
如果你的DataFrame里存在缺失值,还可以在apply(list)前加.dropna()过滤,比如:
my_dict = df.groupby('key')['value'].dropna().apply(list).to_dict()
内容的提问来源于stack exchange,提问作者theQman
相关产品推荐
相关产品推荐

