求助:DataFrame按多条件筛选行并复制至新表的实现问题
解决方法
问题根源
你现在的写法有两个致命问题:
- 嵌套
iterrows()循环是**O(n²)**复杂度,2万行数据会触发4亿次循环,必然卡顿; pd.concat()用法完全错误,你传入的是单行数据(Series)而非DataFrame列表,且没有将结果赋值回变量;append()已被弃用,且每次调用都会生成新DataFrame,效率极低。
正确实现(矢量化操作,秒级处理2万行)
利用Pandas的矢量化特性,不需要遍历就能完成需求:
- 先筛选出
IQ='1'的所有行 - 找出其中
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
相关产品推荐
相关产品推荐

