如何用向量化方法实现Pandas按列索引取值并生成新列?
向量化解决方案(百万级数据高效处理)
针对百万级数据,循环和apply本质都是逐行处理,效率极低,完全可以用基于Numpy的向量化操作实现,速度能提升几个数量级。
核心思路:利用Numpy的多维数组索引,直接批量定位并提取所需值,再完成四舍五入。
具体实现代码
import numpy as np import pandas as pd # 定义对应bestcol的数值列 value_cols = ['Val1', 'Val2', 'Val3'] # 将数值列转换为Numpy数组 value_arr = df[value_cols].values # 把bestcol的1起始索引转为Numpy所需的0起始索引 col_indices = df['bestcol'] - 1 # 批量提取每行对应列的数值 selected_values = value_arr[np.arange(len(value_arr)), col_indices] # 四舍五入后生成Final列 df['Final'] = np.round(selected_values, 0)
性能优势说明
- 所有操作都是底层C语言实现的向量化运算,没有Python层面的逐行循环开销
- 避免了
apply和iloc逐行访问带来的性能损耗,百万级数据处理时间能从分钟级压缩到秒级
示例验证
用你给出的测试数据执行上述代码后,Final列结果与预期完全一致:
| Val1 | Val2 | Val3 | bestcol | Final |
|---|---|---|---|---|
| 1.1 | 2.1 | 3.1 | 1 | 1.0 |
| 11.1 | 22.1 | 33.1 | 2 | 22.0 |
| 111.1 | 222.1 | 333.1 | 3 | 333.0 |
内容的提问来源于stack exchange,提问作者McGoushie
相关产品推荐
相关产品推荐

