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

Pandas DataFrame按条件删除行时循环无法结束的优化求助

Pandas DataFrame 行过滤效率问题解决方案

性能问题原因

你的代码耗时极长是两个错误操作导致的:

  • 逐行遍历DataFrame索引取值,Pandas的Python层单元素循环访问性能极低
  • 每次调用df.drop都会生成全新的DataFrame副本,32万次重复拷贝的时间成本会指数级上涨,3小时跑不完是正常情况

优化后实现

全程使用向量化操作,32万行数据执行耗时不超过1秒:

import pandas as pd
import numpy as np

# 读取原始数据
df22 = pd.read_table('web-NotreDame.txt', header=None)

# 生成10000个不重复的随机数
uniques = np.unique(np.random.randint(0, 10000, size=10000))

# 批量判断两列值是否都在目标集合内,一次性过滤
filter_mask = df22[0].isin(uniques) & df22[1].isin(uniques)
df22 = df22[filter_mask].reset_index(drop=True)

优化逻辑说明

  • 放弃Python层的逐行循环,用Pandas内置的isin向量化方法做批量判断,执行逻辑是C语言级别,性能远高于Python循环
  • 用布尔索引一次性过滤所有不符合要求的行,全程只有一次DataFrame拷贝,没有重复开销
  • 不需要手动构造位向量,isin内部已经做了高效的哈希查找,性能比自行维护列表位向量更高

注意事项

你原代码的判断逻辑存在错误:你写的判断条件是「两列都不在目标集合才删除」,但需求是「仅保留两列都在目标集合的行」,两者逻辑不一致,优化后的代码已经修正了该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:09:03