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

如何优化Pandas匹配筛选逻辑 缩短3万行表格超3小时的处理时长

Pandas 遍历过滤代码优化方案

最优优化代码

仅需2行即可实现完全相同的逻辑,运行耗时可从3小时降至100毫秒以内:

# 过滤保留df中product_code存在于dj.product_numb中的行
df = df[df['product_code'].isin(dj['product_numb'])]

如果dj的体量较大,可提前将目标列转成集合进一步提升匹配效率:

target_set = set(dj['product_numb'])
df = df[df['product_code'].isin(target_set)]

原代码耗时极高的核心原因

  • 行级Python循环开销大:iteritems()是纯Python实现的逐行遍历,没有用到Pandas底层C实现的矢量化计算能力,性能比内置操作低2~3个数量级
  • 匹配逻辑重复计算:每次执行item in dj['product_numb'].values都会全量遍历一次dj的product_numb列,整体时间复杂度达到O(n*m),3万行df的场景下累计运算量超过亿次
  • 频繁生成DataFrame副本:循环内每次执行df.drop(idx)都会复制生成全新的DataFrame对象,3万行600列的表单次复制开销就很高,循环3万次的累计开销极其夸张

多字段匹配场景扩展方案

如果后续需要基于多个字段做匹配过滤,可以用内连接实现,逻辑更清晰:

# 基于product_code和product_numb的匹配保留对应行
df = df.merge(
    dj[['product_numb']], 
    left_on='product_code', 
    right_on='product_numb', 
    how='inner'
).drop(columns='product_numb')

如果dj存在重复的匹配字段值,可提前对dj做去重处理避免结果出现重复行:dj = dj.drop_duplicates('product_numb')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:45:05