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

求助:DataFrame按多条件筛选行并复制至新表的实现问题

解决方法

问题根源

你现在的写法有两个致命问题:

  • 嵌套iterrows()循环是**O(n²)**复杂度,2万行数据会触发4亿次循环,必然卡顿;
  • pd.concat()用法完全错误,你传入的是单行数据(Series)而非DataFrame列表,且没有将结果赋值回变量;append()已被弃用,且每次调用都会生成新DataFrame,效率极低。

正确实现(矢量化操作,秒级处理2万行)

利用Pandas的矢量化特性,不需要遍历就能完成需求:

  1. 先筛选出IQ='1'的所有行
  2. 找出其中StudentID、ClassDate、IQ三列存在重复的行(即至少与另一行匹配的行)
# 第一步:筛选IQ为'1'的行
filtered_iq1 = df_quant[df_quant['IQ'] == '1']

# 第二步:标记出三列重复的所有行(keep=False会标记重复组里的每一行)
duplicated_rows = filtered_iq1.duplicated(
    subset=['StudentID', 'ClassDate', 'IQ'],
    keep=False
)

# 提取符合条件的行到新DataFrame
df_isquant = filtered_iq1[duplicated_rows]

代码说明

  • duplicated(subset=..., keep=False):会为所有重复组内的行标记True,正好满足你"至少与另一行匹配"的需求;
  • 全程都是Pandas底层优化的矢量化操作,避免了Python层面的循环,处理2万行数据基本瞬间完成;
  • 保留原DataFrame的所有列,不需要担心列匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:30:39