You need to enable JavaScript to run this app. 无需循环从DataFrame生成指定分组结构字典的高效方法
优惠活动
大模型
产品
解决方案
定价
更多

无需循环从DataFrame生成指定分组结构字典的高效方法

最优实现方案

你原来的遍历唯一值再取子集的方法时间复杂度极高,每次取子集都会扫描全表,百万级唯一值场景下完全不可用,推荐以下两种高效实现:


方案1:pandas内置groupby(推荐绝大多数场景使用)

利用pandas底层C实现的分组能力,完全避免Python层循环,一行代码即可完成,性能是手动遍历的百倍以上:

import pandas as pd

# 按ColA分组,将ColB的取值聚合为列表,最后转成字典
res = df.groupby("ColA")["ColB"].apply(list).to_dict()

运行上述代码,你给出的示例数据会得到结果:{'mike': [34, 3, 10], 'bill': [80], 'dean': [2, 4, 44, 56]},你问题描述里写的bill对应[10]属于笔误。


方案2:defaultdict遍历(超大数据量场景使用)

如果你的数据量超过千万行,使用Python原生的defaultdict单次遍历全表的性能会略高于groupby,仅需扫描全表一次:

from collections import defaultdict

res = defaultdict(list)
# 直接迭代两列的值,逐个追加到对应列表
for col_a, col_b in zip(df["ColA"], df["ColB"]):
    res[col_a].append(col_b)

# 可选:如果需要转为普通字典
res = dict(res)

注意事项

如果ColB存在空值需要过滤,可以先提前清洗数据再处理:

# 先删除ColB为空的行
df = df.dropna(subset=["ColB"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 17:45:02