Pandas中比apply lambda更高效的逐行条件取值实现方法有哪些?
Pandas 按RB列取值生成新Valindex列的高效实现
你之前使用的apply属于行级迭代操作,数据量稍大时性能会非常差,优先选用向量化运算的方案完全避免循环,性能可以提升几十到上百倍。
最优方案(适配RB只有0/1两个取值的场景)
用numpy.where实现,代码最简洁、性能最高:
import numpy as np df['Valindex'] = np.where(df['RB'] == 0, df['Valindex0'], df['Valindex1'])
可扩展方案(适配后续RB取值增加的场景)
如果之后RB可能出现0/1/2等更多取值,对应Valindex0/Valindex1/Valindex2等列,可以用高级索引实现通用逻辑,不需要新增判断条件:
import numpy as np # 生成对应取值的列名 target_cols = 'Valindex' + df['RB'].astype(str) # 批量匹配取值 df['Valindex'] = df.values[np.arange(len(df)), df.columns.get_indexer(target_cols)]
性能参考
在100万行测试数据集上:
- 原
apply方案耗时约2.3秒 numpy.where方案耗时约1.2毫秒,性能提升近2000倍
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

