python数据帧中站点之间的距离计算

python数据帧中站点之间的距离计算,python,pandas,logic,Python,Pandas,Logic,我在Python中使用长坐标和纬度坐标,我试图在一个数据帧中找到两个站点之间的距离,但是,我很难找到如何在pandas中做到这一点。如果long=x且lat=y,我理解计算距离sqrt((x1-x2)^2+(y1-y2)^2)的逻辑,但我不理解如何在数据帧中进行此操作。我的任务更为复杂,因为我试图在第1行中找到离站点最近的前3个站点(最终我必须遍历所有行) 问题是,有没有比逐行迭代更好的方法来解决这个问题?由于我还必须找到离每行最近的k个站点,我不确定ItError()是否是最佳解决方案,但我想

我在Python中使用长坐标和纬度坐标,我试图在一个数据帧中找到两个站点之间的距离,但是,我很难找到如何在pandas中做到这一点。如果long=x且lat=y,我理解计算距离sqrt((x1-x2)^2+(y1-y2)^2)的逻辑,但我不理解如何在数据帧中进行此操作。我的任务更为复杂,因为我试图在第1行中找到离站点最近的前3个站点(最终我必须遍历所有行)

问题是,有没有比逐行迭代更好的方法来解决这个问题?由于我还必须找到离每行最近的k个站点,我不确定ItError()是否是最佳解决方案,但我想不出更聪明的矩阵方法来解决这个问题。见下面的示例数据。所以我需要一列“最近的站点”,对于第1行,最近的站点是:6,然后是4,然后是5,所以我需要第1行显示如下:

谢谢

样本数据:


Numpy使这一点变得简单明了,即使使用大型数据集也是如此。见下文

# Turn Pandas dataframe into ndarray
data = data.to_numpy(dtype='float')

# Make a reference array out of first row
ref = np.tile(data[0], (data.shape[0], 1))

# Use vectorized computation to find distance for each site
dist = (data[:,1:3] - ref[:,1:3]) ** 2     # Replace 1:3 with appropriate column indices for lat and long
dist = np.sum(dist, axis=1)
dist = np.sqrt(dist).resize((data.shape[0], 1))

# Concatenate distance on to data
data = np.concatenate((data, dist), axis=1)

# Sort resulting ndarray by distance
data = data[np.argsort(data[:,-1])]

# Get IDs of 3 closest sitaes
ids = [data[i, 0] for i in range(1, 4)]
这段代码可以快速返回与第一行数据最近的三个站点的ID值。如果您也想找到与其他行最近的3个站点,只需将第i行的
np.tile(data[0],(data.shape[0],1))
更改为
np.tile(data[i],(data.shape[0],1))
。如果要对多行执行此操作,那么每次创建一个数据副本并使用它以使原始数据保持不变也是明智的


一旦你有了最近站点的ID,你可以用它们做任何你想做的事情。把它们放在另一张桌子上,让它们看起来漂亮,或者做你想做的事情。如果您需要将ndarray转换回Pandas数据帧,只需使用Pandas.dataframe(ndarray)

谢谢!比我计划做的更有效率!现在试着去理解它!