如何将高程纳入大Pandas的欧氏距离矩阵?

2024-10-03 04:33:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在熊猫中有以下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
    }
})

我试图创建一个距离矩阵,它表示在这些CityIds之间移动的成本。使用pdistsquareform来自scipy.spatial.distancesquareform我可以执行以下操作:

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()
)

这给出了所有CityIds之间的距离矩阵,使用从pdist计算的成对距离。你知道吗

我想把elevation_meters合并到这个距离矩阵中。什么是有效的方法?你知道吗


Tags: import距离dataframedf矩阵scipyspatialdistance
1条回答
网友
1楼 · 发布于 2024-10-03 04:33:52

你可以试试scipy.spatial.distance_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

相关问题 更多 >