计算同一列python中两点之间的距离

时间:2018-02-19 14:38:58

标签: python python-3.x

我在csv文件中有两列已导入到pandas dataframe中。第一列是纬度,第二列是经度。对于每个lat,long,我想找到列中所有其他坐标之间的距离,并返回最小距离的位置。

import pandas as pd
import numpy as np
import geopy.distance
from math import sin,cos,sqrt,atan2,radians

df=pd.read_csv('coordinates.csv')
R=6373.0

df['coords']=list(zip(df['lat'],df['long'])
df['coords2']=list(zip(df['lat'],df['long'])

因此,对于每个坐标,我希望能够找到列表中所有其他坐标的最小坐标,但下面的for循环只是给出了一个很长的距离列表,没有跟踪位置。

我有一个需要2分的距离函数:

def distance (p1, p2):
    return (geopy.distance.vincenty(p1,p2).km)

dist=[]
for i in range(0,len(df.coords)):
         for j in range(0,len(df.coords2)):
             if df.coords[i] != df.coords2[j]:
                 x=distance2(df.coords[i],df.coords2[j])
                 dist.append(df.coords[i], x)

示例数据:

location lat            long
0        34.159525  -82.381883
1        33.57112   -81.761782
2        32.965361  -81.248054
3        34.511574  -82.646487

想要输出:

   location lat         long         closest_distance
    0        34.159525  -82.381883   2
    1        33.57112   -81.761782   3
    2        32.965361  -81.248054   3
    3        34.511574  -82.646487   0

1 个答案:

答案 0 :(得分:1)

假设您定义的函数distance适用于两个输入相同的时间(返回0),则以下强制执行应该有效:

def foo(latlong, location=list(range(len(latlong))):
    closest_distance = []
    for i in latlong:
        dist = list(map(lambda x: distance(i,x), latlong))
        min = dist.sort()
        closest_distance.append(location[dist.index(min[1])])
    return closest_distance

latlong是经度 - 元组元组的列表,location是您选择给出这些对的名称列表,从您的写入看起来就像简单的编号。