列出数据帧所有行给定半径内的点名称

问题描述 投票:0回答:1

我有一个像这样的数据框:

projectName latitude    longitude
a          56.864229    60.609576
b          55.810413    37.701168
c          55.924912    37.966033
d          56.804987    60.590667
e          55.806000    37.569863

我想获取每个点给定半径内的点列表。 以 10 公里为例,应该是这样的:

projectName latitude    longitude   10km
a          56.864229    60.609576  [d]
b          55.810413    37.701168  [c, e]
c          55.924912    37.966033  [b, e]
d          56.804987    60.590667  [a]
e          55.806000    37.569863  [b, c]

我怎样才能最快地得到这个?

python pandas geo
1个回答
0
投票

您可以计算成对半正弦距离并过滤值:

from sklearn.metrics import DistanceMetric

tmp = df.set_index('projectName')[['latitude', 'longitude']]

keep = (DistanceMetric
        .get_metric('haversine')
        .pairwise(np.radians(tmp))*6371 < 10
       )

np.fill_diagonal(keep, False)

df['10km'] = (keep @ (tmp.index+',')).str[:-1]

输出:

  projectName   latitude  longitude 10km
0           a  56.864229  60.609576    d
1           b  55.810413  37.701168    e
2           c  55.924912  37.966033     
3           d  56.804987  60.590667    a
4           e  55.806000  37.569863    b
© www.soinside.com 2019 - 2024. All rights reserved.