首页 > 解决方案 > 在 Pandas 数据框中查找最接近输入的值

问题描述

我的数据框的第一行如下所示。列是经度、纬度和值。这个数据框扩展了 3000 万行。

-179.979166666666657 89.9791666666666714 -3.39999995214436425e+38
-179.9375 89.9791666666666714 -3.39999995214436425e+38
-179.895833333333343 89.9791666666666714 -3.39999995214436425e+38
-179.854166666666657 89.9791666666666714 -3.39999995214436425e+38
-179.8125 89.9791666666666714 -3.39999995214436425e+38
-179.770833333333343 89.9791666666666714 -3.39999995214436425e+38
-179.729166666666657 89.9791666666666714 -3.39999995214436425e+38
-179.6875 89.9791666666666714 -3.39999995214436425e+38
-179.645833333333343 89.9791666666666714 -3.39999995214436425e+38

我试图找到与给定输入最近的经度和纬度点,然后打印出与最接近的经度和纬度相关的值。我试图将数据帧转换为数组,然后使用此算法搜索最小值:

def match (lon, lat):
    min=10000
    minindex=-1
    for x in range (len (mintemparr)):
        if (abs ((float (lon))-float (mintemparr [x][0])))+(abs ((float (lat))-float (mintemparr [x] 
        [1])))<min:
             
              min=(abs ((float (lon))-float (mintemparr [x][0])))+(abs ((float (lat))-float 
             (mintemparr [x][1])))
       minindex=x
    result=mintemparr [minindex][2]
    return result 

但是,这非常缓慢。有没有更直接的方法来搜索 pandas 中最接近的值,而不是将其转换为数组。

提前致谢。

标签: pythonpandas

解决方案


def find_closest(df, lat, lon):
    dist = (df['lat'] - lat).abs() + (df['lon'] - lon).abs()
    return df.loc[dist.idxmin()]

>>> find_closest(df, -179, 90)
lat     -1.796458e+02
lon      8.997917e+01
value   -3.400000e+38
Name: 8, dtype: float64

推荐阅读