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

Pandas如何高效实现类Vlookup 按匹配值聚合列到列表

性能瓶颈原因

当前逐行apply+全表布尔筛选的实现时间复杂度为O(N*M)(N为原表总行数,M为Series2列的唯一值数量),每处理一个Series2取值都要扫描全部90万行数据,效率极低,长时间运行无结果是正常表现。

最优实现

使用pandas原生groupby聚合完成计算,该逻辑由底层优化的Cython实现,仅需单次遍历原表即可完成分组统计和值聚合,时间复杂度为O(N),90万行规模的数据可在数秒内完成计算。

直接生成完整结果(推荐)

无需分步计算值计数,一次聚合直接得到包含Series2、counts、Series1_List三列的目标结果:

df2 = df.groupby('Series2', as_index=False).agg(
    counts=('Series1', 'count'),
    Series1_List=('Series1', list)
)

适配已有df2的快速匹配

如果已经提前生成了带counts列的df2,可先构建分组映射字典再做匹配,避免逐行扫描原表:

# 预构建Series2取值到对应Series1列表的映射
series2_map = df.groupby('Series2')['Series1'].apply(list).to_dict()
# 批量映射赋值
df2['Series1_List'] = df2['Series2'].map(series2_map)
额外优化建议

如果后续需要对Series1_List中的值做数值运算,聚合时不要存储Python原生列表,替换为numpy数组可大幅降低内存占用、提升运算效率,只需将聚合参数中的list替换为lambda x: x.to_numpy()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:57:20