【问题标题】:Find the intersect or nearest geo coordinates from pandas dataframe columns从 pandas 数据框列中查找相交或最近的地理坐标
【发布时间】:2021-11-22 05:40:02
【问题描述】:

我在 pandas 数据框中有纬度、经度和地址。用户输入一个地址,我想根据 lat、long 查找与 pandas 数据帧相关的详细信息。这是我的代码:

import pandas as pd

df_geo = pd.DataFrame({'Address': ['Addr1','Addr2','Addr3'],
                       'Value': [100, 101, 103],
                       'Lat': [33.515226, 33.51529, 33.515230],
                       'Long': [-112.094456, -112.094459, -112.094464]})

我使用 API 对地址进行地理编码并获取经纬度列表。

[33.515227, -112.094457]

如何在 pandas 数据框中找到交点或最近的坐标并拉出 AddressValue 字段?我们有地理编码 API。 Pandas DataFrame 可能相当大,因此如果可能,请使用 Python 地理库之一寻找有效的解决方案。

【问题讨论】:

  • 您可以通过类似 hasrsine 的方法传递每一行来计算距离并将该距离放在其他列中。然后按值分组,并过滤​​距离最小的那些
  • 请在问题中发布预期输出。
  • @FaikaMajid 对,这是有道理的。但是,我正在寻找一种更好的方法来做到这一点,因为 N 可能相当大,我想避免计算可能会增加时间复杂度的成对距离。

标签: python pandas geospatial


【解决方案1】:

使用来自sklearnBallTree

import pandas as pd
import numpy as np
from sklearn.neighbors import BallTree

df_geo = pd.DataFrame({'Address': ['Addr1','Addr2','Addr3'],
                       'Value': [100, 101, 103],
                       'Lat': [33.515226, 33.51529, 33.515230],
                       'Long': [-112.094456, -112.094459, -112.094464]})

coords = [33.515227, -112.094457]

X = np.deg2rad(df_geo[['Lat', 'Long']].values)
y = np.deg2rad(np.array([coords]))

tree = BallTree(X, leaf_size=2)
dist, ind = tree.query(y)

输出:

>>> df_geo[['Address', 'Value']].iloc[ind[0][0]].tolist()
['Addr1', 100]

>>> dist
array([[2.46826831e-08]])

>>> ind
array([[0]])

【讨论】:

  • @kms。请让我知道此解决方案是否适合您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多