如何在不做循环的情况下找到给定经度和纬度的两点之间的距离?

时间:2019-07-12 11:24:05

标签: python distance latitude-longitude

我有两个经度和纬度的位置,我想在python中获得这些点之间的距离。我的数据集如下所示:

 df_TEST = pd.DataFrame({'Location': ['X1','X2'],
                     'Long': [ 28.63615701706,76],
                     'Lat': [ 41.0693487044612,54],
                     'Location1': ['Y1','Y2'],
                     'Long1': [30.7158891385255,65],
                     'Lat1': [36.963486025471,45]}) 

我想使用以下代码向此数据框添加新列,但它仅适用于一行。我有一个庞大的数据集,我想添加此列而不执行do循环。来自的建议解决方案 How to find the distance between two points given longitude and latitude in python-error? 我该怎么办?

 df_TEST['distance']=geopy.distance.geodesic(float(df_TEST['Long'] . 
[0]), float(df_TEST['Lat'][0]),(float(df_TEST['Long1'] . 
[0]),float(df_TEST['Lat1'][0]))).km

2 个答案:

答案 0 :(得分:0)

您可以在DataFrame上使用apply()函数,以将函数应用于DataFrame的每一行。

代码如下:

def distance(row):
    return (geopy.distance.geodesic((row['Long'], row['Lat']), 
                                     row['Long1'], row['Lat1']).km)

df_TEST['distance']=df_TEST.apply(distance, axis=1)

答案 1 :(得分:0)

我可能错过了一些东西,但是

>>> df_TEST['distance_km'] = df_TEST.apply(
        lambda r: geopy.distance.geodesic(
                r.Long, r.Lat,  r.Long1, r.Lat1
            ).km,
        axis=1
    )
>>> df_TEST
  Location       Long        Lat Location1      Long1       Lat1  distance_km
0       X1  28.636157  41.069349        Y1  30.715889  36.963486  3221.113126
1       X2  76.000000  54.000000        Y2  65.000000  45.000000  5904.462593