我有一个名为 location_details 的数据框,其中包含位置名称,纬度和经度:
location_details :
Index Latitude Longitude
London 51.3245 -3.2341
Paris 52.4523 -3.5334
New York 50.2313 -3.3245
基于此数据框,我想创建另一个数据框,其中索引中的所有位置,列中的所有位置以及任意两个位置之间的距离(以km为单位)作为字段。看起来像这样:
新数据框:
Index London Paris New York
London 0 1000 2000
Paris 1000 0 3000
New York 2000 3000 0
我正在使用此公式计算距离:
import geopy.distance
coords_1 = (52.2296756, 21.0122287)
coords_2 = (52.406374, 16.9251681)
print (geopy.distance.distance(coords_1, coords_2).km)
我所做的是非Python的,并且没有以任何方式进行优化,是这样的:
location_name = ['London','Paris','New York']
for i in location_name:
coords_i = (location_details.loc[i]['Latitude'],location_details.loc[i]['Longitude'])
for j in location_name:
coords_j = (location_details.loc[j]['Latitude'],location_details.loc[j]['Longitude'])
new_dataframe.loc[i,j] = geopy.distance.distance(coords_i,coords_j).km
是否有更聪明的方法?我不知道在这种情况下如何使用 apply 。
编辑:
在下面找到一个整洁的解决方案,该解决方案的编译速度比我最初的解决方案快得多:
for i in all_locations:
location_coordinates.append([name,(latitude,longitude)])
location_name.append(name)
location_distances_list = [geopy.distance.distance(value_i[1],value_j[1]).km for i, value_i in enumerate(location_coordinates) for j, value_j in enumerate(location_coordinates)]
location_distances = pd.DataFrame(np.array(location_distances_list).reshape(2583,2583),
columns=location_name, location=station_name)