python - 在 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 中最接近的值,而不是将其转换为数组。
提前致谢。
解决方案
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
推荐阅读
- https - 发布 https 请求时的邮递员 ssl 问题
- spss - SPSS - 排名和分区
- powershell - Powershell 使用 arg 启动/停止
- javascript - 骨干集合何时真正触发“更新”事件
- java - 我没有数据库选项(Intellij IDEA)
- oracle - 创建oracle函数的问题
- android - 如何在 EditText 中以不同颜色标记值?
- c# - 将鼠标放在 UI 元素上
- java - 如何在从 ArrayList 返回它们之前比较两个对象中保存的变量?
- java - oracleConnection.createARRAY 不适用于 WebLogic 数据源连接