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

基于Numpy优化DataFrame间值存在性检查的高效方案

优化大DataFrame下FLAG_NEW字段的生成效率

原代码运行缓慢的核心问题:

  • 依赖iterrows()逐行遍历,属于Python层面的循环,远不及Pandas向量化操作的执行效率
  • 每次循环重复调用historized.ID.to_list()生成列表,且列表的in查询是O(n)复杂度,数据量越大越耗时

最优优化方案(向量化+集合查询)

直接用Pandas的isin()向量化方法,搭配集合提升查询效率:

# 将historized的ID转为集合(集合成员查询是O(1),比列表快几个数量级)
historized_id_set = set(historized["ID"])

# 方法1:布尔值转整数(~取反,不在集合内的为True,转int后对应1)
gdf_pot["FLAG_NEW"] = (~gdf_pot["ID"].isin(historized_id_set)).astype(int)

# 方法2:用np.where实现逻辑映射
import numpy as np
gdf_pot["FLAG_NEW"] = np.where(gdf_pot["ID"].isin(historized_id_set), 0, 1)

方案高效的原因

  • isin()是Pandas底层实现的向量化操作,基于C语言处理数据,比Python逐行循环快几十到几百倍
  • 集合的查询复杂度远低于列表,数据量越大,这个优化的效果越显著

你之前用np.where失败的可能原因

大概率是没把historized.ID转为集合,或者错误地在逐行循环中使用np.where——正确用法是直接对整个ID列做向量化判断,而非逐行处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:45:34