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

如何以向量化方式为Pandas DataFrame每行匹配列表最近元素

向量化实现Pandas列匹配列表中最接近元素

给定如下Pandas DataFrame和对比列表,需要为DataFrame新增assigned_value列,每行取值为对比列表中与Results列对应值最接近的元素,以下是无需循环或apply的向量化实现方案:

原始数据

import pandas as pd
import numpy as np

df = pd.DataFrame({'Results': [90, 80, 70, 60, 50, 40, 30, 20, 10]})
comparation_list = [83, 72, 65, 40, 36, 22, 15, 12]

向量化实现步骤

  1. 将对比列表转换为numpy数组,便于后续广播运算:

    comp_arr = np.array(comparation_list)
    
  2. 利用numpy广播机制,计算Results列每个值与对比列表所有元素的绝对差值:

    # 将Results转为二维数组,实现与对比数组的逐元素运算
    diff = np.abs(df['Results'].values[:, np.newaxis] - comp_arr)
    
  3. 按行找出差值最小的元素索引:

    min_indices = diff.argmin(axis=1)
    
  4. 根据索引映射得到对应最接近值,新增到DataFrame中:

    df['assigned_value'] = comp_arr[min_indices]
    

最终结果

执行上述代码后,DataFrame输出如下:

Results  assigned_value
0       90              83
1       80              83
2       70              72
3       60              65
4       50              40
5       40              40
6       30              36
7       20              22
8       10              12

原理说明

  • 借助numpy广播特性,避免逐行循环,将运算转化为矩阵级操作,大幅提升效率;
  • argmin(axis=1)实现向量化的最小值索引查找,性能远优于apply的逐行处理方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:05:34