应用于基于另一个数据框中的字段填充数据框

时间:2020-03-03 17:48:50

标签: python pandas apply

我有一个名为 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的,并且没有以任何方式进行优化,是这样的:

  1. 我首先创建了一个名为 location_name 的列表,其中包含所有位置-例如location_name = ['London','Paris','New York']
  2. 使用double for循环,我得到了所有位置的坐标,并使用上述公式将它们添加到了 new_dataframe
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)

0 个答案:

没有答案