gpt4 book ai didi

python - 到同一 DF 中最近点的距离

转载 作者:行者123 更新时间:2023-12-01 06:27:55 25 4
gpt4 key购买 nike

我有一个带有对象 ID、纬度和经度的 df。我想创建两个新列:到最近点的距离和最近点的对象 ID。

df[['OBJECT_ID','Lat','Long']].head()

OBJECT_ID Lat Long
0 33007002190000.0 47.326963 -103.079835
1 33007007900000.0 47.259770 -103.040797
2 33007008830000.0 47.296953 -103.099424
3 33007012130000.0 47.256700 -103.597082
4 33007013320000.0 46.996013 -103.452384

如何在 Python 中使用任何库来完成此操作?另外,如果有帮助的话,我的 DF 包含几千行。

最佳答案

您可以使用scipy's KDTree为了它。它非常适合空间距离查询。

使用示例数据,您可以执行类似的操作

import scipy

coordinates = df[["Lat", "Long"]]
# build kdtree
kdtree = scipy.spatial.cKDTree(coordinates)
# query the same tree with the same coordinates. NOTICE the k=2
distances, indexes = kdtree.query(coordinates, k=2)

# assign it to a new dataframe (NOTICE the index of 1)
new_df = df.assign(ClosestID=df["OBJECT_ID"][indexes[:,1]].array)
new_df = new_df.assign(ClosestDist=distances[:,1])

结果

>> new_df

OBJECT_ID Lat Long ClosestID ClosestDist
0 33007002190000.0 47.326963 -103.079835 33007008830000.0 0.035838
1 33007007900000.0 47.259770 -103.040797 33007008830000.0 0.069424
2 33007008830000.0 47.296953 -103.099424 33007002190000.0 0.035838
3 33007012130000.0 47.256700 -103.597082 33007013320000.0 0.298153
4 33007013320000.0 46.996013 -103.452384 33007012130000.0 0.298153

使用k=2的原因是因为最近距离(使用相同坐标查询时)始终是同一点。即:

>> kdtree.query(coordinates, k=2)

# this is distance
(array([[0. , 0.03583754],
[0. , 0.06942406],
[0. , 0.03583754],
[0. , 0.29815302],
[0. , 0.29815302]]),
# ^ ^
# | |
# closest second-closest

# this is indexes
array([[0, 2],
[1, 2],
[2, 0],
[3, 4],
[4, 3]]))

距离每个点最近的点就是它自己。因此,我们忽略第一个元素,并使用index=1来检索第二个最近点(即除自身之外的最近点)。

关于python - 到同一 DF 中最近点的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60034574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com