Python 如何将高程合并到熊猫的欧几里德距离矩阵中?

Python 如何将高程合并到熊猫的欧几里德距离矩阵中?,python,pandas,matrix,euclidean-distance,altitude,Python,Pandas,Matrix,Euclidean Distance,Altitude,我在熊猫中有以下dataframe: import pandas as pd df = pd.DataFrame({ "CityId": { "0": 0, "1": 1, "2": 2, "3": 3, "4": 4 }, "X": { "0": 316.83673906150904, "1": 4377.40597216624,

我在熊猫中有以下
dataframe

import pandas as pd

df = pd.DataFrame({
    "CityId": {
        "0": 0, 
        "1": 1, 
        "2": 2, 
        "3": 3, 
        "4": 4
    }, 
    "X": {
        "0": 316.83673906150904, 
        "1": 4377.40597216624, 
        "2": 3454.15819771172, 
        "3": 4688.099297634771, 
        "4": 1010.6969517482901
    }, 
    "elevation_meters": {
        "0": 1, 
        "1": 2, 
        "2": 3, 
        "3": 4, 
        "4": 5
    }, 
    "Y": {
        "0": 2202.34070733524, 
        "1": 336.602082171235, 
        "2": 2820.0530112481106, 
        "3": 2935.89805580997, 
        "4": 3236.75098902635
    }
})
我试图创建一个距离矩阵,表示在每个
城市ID
之间移动的成本。使用
scipy.space.distance
中的
pdist
squareform
,我可以执行以下操作:

from scipy.spatial.distance import pdist, squareform

df_m = pd.DataFrame(
    squareform(
        pdist(
            df[['CityId', 'X', 'Y']].iloc[:, 1:],
            metric='euclidean')
    ),
    index=df.CityId.unique(),
    columns= df.CityId.unique()
)
这为我提供了所有
城市ID
之间的距离矩阵,使用从
pdist
计算的成对距离


我想将
高程\u米
合并到该距离矩阵中。这样做的有效方法是什么?

您可以尝试
scipy.space.distance\u matrix

xx = df[['X','elevation_meters', 'Y']]
pd.DataFrame(distance_matrix(xx,xx), columns= df['CityId'],
             index=df['CityId'])
输出:

CityId  0               1                2              3               4
CityId                  
0       0.000000        4468.691544     3197.555070     4432.386687     1245.577226
1       4468.691544     0.000000        2649.512402     2617.799439     4443.602402
2       3197.555070     2649.512402     0.000000        1239.367465     2478.738402
3       4432.386687     2617.799439     1239.367465     0.000000        3689.688537
4       1245.577226     4443.602402     2478.738402     3689.688537     0.000000

涉及高度米的距离公式是什么?它是jut
z
坐标吗?它只是一个以米为单位的值,可以添加到成对距离中。如果有帮助的话,它可以被制作成一个
z
坐标。那么,在上面的公式中,是什么阻止了你把它带进来呢?谢谢,这似乎是可行的。我仍在试图理解scipy.spatial.distance_matrix,它是如何区分纬度/经度和海拔的?一般来说,
z
坐标不是以米/公里为单位的高度吗?为什么<代码>海拔2米/代码>位于中间?简而言之,它只看每一行并计算距离<代码> Sqt((x1-x2)** +(Z1-Z2)** 2 +(y1-y2)** 2)< /代码>。关于为什么<代码>海拔×<代码>出现在中间,我不知道。也许你应该问一下数据的创建者。关于
高程_米
,我指的是
scipy.space.distance_matrix
函数中的位置放置,以及它是否重要,特别是考虑到纬度和经度以地理坐标表示,海拔以米为单位。从公式中可以看出,顺序并不重要。您可以通过
[X,elev,Y]
[X,Y,elev]
仍然可以得到相同的答案。在这种情况下,似乎
方形(pdist(df[[X','elevation\u meters','Y'])==距离矩阵(xx,xx)