我有一个像这样的数据框:
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]
我怎样才能最快地得到这个?
您可以计算成对半正弦距离并过滤值:
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