You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化大规模Pandas DataFrame生成指定结构字典的过程

Pandas 大数据量表转Supplier字典最优方案

核心实现(耗时最低、内存开销最小)

直接使用pandas内置的groupby聚合逻辑,比遍历行的实现效率高5-10倍,适配300万行、40万唯一Supplier的场景完全无压力。

基础版(保留重复值)

把代码里的关联值列名替换为你需要存入列表的字段名即可:

result = df.groupby('Supplier', sort=False)['关联值列名'].apply(list).to_dict()
  • 加sort=False是因为groupby默认会对Supplier的键排序,不需要排序的场景关掉可以减少20%-40%的运行时间

去重版(每个Supplier的列表值无重复)

result = df.groupby('Supplier', sort=False)['关联值列名'].unique().apply(list).to_dict()

多列聚合版(要存多个字段的关联值)

result = df.groupby('Supplier', sort=False)[['列1', '列2']].apply(lambda x: x.values.tolist()).to_dict()

额外优化技巧

  • 如果关联值列是字符串/object类型,提前转成category类型可以再降30%-50%的耗时:
df['关联值列名'] = df['关联值列名'].astype('category')
  • 内存不足的场景改用分块处理,不需要把全量数据一次性加载到内存:
from collections import defaultdict
import pandas as pd

res = defaultdict(list)
# 如果数据已经加载到内存,也可以按行切片分块处理
for chunk in pd.read_csv('你的数据文件路径.csv', chunksize=100000):
    chunk_agg = chunk.groupby('Supplier', sort=False)['关联值列名'].apply(list)
    for k, v in chunk_agg.items():
        res[k].extend(v)

result = dict(res)

避坑提醒:不要用iterrows/itertuples逐行遍历塞字典,300万行的场景下耗时是groupby方案的5倍以上,内存开销也高2-3倍。

内容的提问来源于stack exchange,提问作者ROHIT SHARMA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:09:00