在计算 langitude 和 longitude 之间的距离时,数据帧列中重复相同的值。我创建了一个动态列来查找每个源到目的地之间的距离,但每列的所有值都是重复的。
for a,b,x in zip(df.Longitude,df.Latitude,df.index):
for c,d in zip(df.Longitude,df.Latitude):
df['distance_'+str(x)]=haversine(a,b,c,d)
Run Code Online (Sandbox Code Playgroud)
假设这是数据框
index name lat long
0 a 74.299104 31.481188
1 b 74.351619 39.481188
2 c 73.351619 39.481188
Run Code Online (Sandbox Code Playgroud)
现在我想要这样的预期结果
index name lat long distanceA distanceB distanceC
0 a 74.299104 31.481188 0 4.5 2.4
1 b 74.351619 39.481188 5.7 0 5.8
2 c 73.351619 39.481188 3.8 1.3 0
Run Code Online (Sandbox Code Playgroud)
由于结果沿对角线镜像,因此您可以将迭代次数减半:
res = pd.DataFrame(index=df['name'], columns=df['name'])
for idx1 in df.index:
for idx2 in df.index[idx1+1:]:
name1, lat1, lon1 = df.loc[idx1, ['name', 'lat', 'long']]
name2, lat2, lon2 = df.loc[idx2, ['name', 'lat', 'long']]
res.loc[name1, name2] = haversine(lat1, lon1, lat2, lon2)
res = res.add(res.T, fill_value=0) # res is upper triangular
Run Code Online (Sandbox Code Playgroud)