Pandas按行apply效率优化:动态列阈值过滤提速方案
高效可扩展的大数据集过滤方案
针对500万行以上的数据集,逐行apply的处理方式因Python级循环导致效率极低,这里提供一种纯向量化、可扩展的解决方案,无需修改代码即可适配新增的测量列:
核心思路
通过numpy的数组索引直接提取每行T_name指定的测量值,再与阈值T做向量化比较,完全规避逐行循环的开销。
实现代码
import pandas as pd import numpy as np # 示例数据 df = pd.DataFrame({'A':[1,1,4,4],'B':[9,9,6,6], 'T_name': ['A','B','A','B'], 'T':[2,4,3,5]}) # 1. 获取每行T_name对应的列索引 col_indices = df.columns.get_indexer(df['T_name']) # 2. 向量化提取对应测量值 measured_values = df.to_numpy()[np.arange(len(df)), col_indices] # 3. 生成过滤掩码 mask = measured_values > df['T'].to_numpy() # 4. 过滤得到结果 high_values = df[mask]
输出结果
A B T_name T 1 1 9 B 4 2 4 6 A 3 3 4 6 B 5
优势说明
- 极致性能:基于numpy的C级向量化操作,比
apply快100~1000倍,500万行数据可在数秒内完成处理。 - 完美扩展性:后续新增测量列(如C、D)时,只要
T_name的取值对应新增列名,无需修改任何代码即可自动适配。 - 内存友好:所有操作均基于原数据的数组视图,不会额外产生大规模中间数据。
内容的提问来源于stack exchange,提问作者Shabbir Hussain
相关产品推荐
相关产品推荐

