Python 在没有do循环的情况下,如何求给定经纬度的两点之间的距离?
我有两个给定经度和纬度的位置,我想用python获得这些点之间的距离。我的数据集如下所示:Python 在没有do循环的情况下,如何求给定经纬度的两点之间的距离?,python,distance,latitude-longitude,Python,Distance,Latitude Longitude,我有两个给定经度和纬度的位置,我想用python获得这些点之间的距离。我的数据集如下所示: df_TEST = pd.DataFrame({'Location': ['X1','X2'], 'Long': [ 28.63615701706,76], 'Lat': [ 41.0693487044612,54], 'Location1': ['Y1','Y2'],
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]})
我想用下面的代码在此数据框中添加一个新列,但它只适用于一行。我有一个巨大的数据集,我想添加这个列而不做循环。建议的解决方案
我该怎么做
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
您可以在数据帧上使用
apply()
函数,将函数应用于数据帧的每一行
代码如下:
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)
您可以在数据帧上使用
apply()
函数,将函数应用于数据帧的每一行
代码如下:
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)
我可能错过了一些东西,但是你呢
>>> 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
我可能错过了一些东西,但是你呢
>>> 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