计算两个数据框的列之间的距离

问题描述 投票:0回答:1

我有两个数据框,每列包含不同人的值:

import numpy as np
import pandas as pd
import math

df1 = pd.DataFrame({
    "Anna":[1.5,-2,2.5],
    "Bob":[2.5,-3,3.5],
    "Cam":[3.5,-4,4.5]})
df2 = pd.DataFrame({
    "Dave":[1,-2.5,2],
    "Emma":[2,-3.5,3],
    "Fred":[3,-4.5,4]})

print(df1)

   Anna  Bob  Cam
0   1.5  2.5  3.5
1  -2.0 -3.0 -4.0
2   2.5  3.5  4.5

print(df2)

   Dave  Emma  Fred
0   1.0   2.0   3.0
1  -2.5  -3.5  -4.5
2   2.0   3.0   4.0

有没有比这个双循环更快的方法来获得从 df1 中的每个人到 df2 中的每个人的距离矩阵?

results = []

for n1 in df1.columns:
    results.append([])
    for n2 in df2.columns:
        results[-1].append(math.dist(df1[n1], df2[n2]))


res_df = pd.DataFrame(results)
res_df.columns = df1.columns
res_df.index = df2.columns

print(res_df)


        Anna        Bob         Cam
Dave    0.866025    1.658312    3.278719
Emma    2.179449    0.866025    1.658312
Fred    3.840573    2.179449    0.866025
python pandas dataframe distance
1个回答
1
投票

您可以使用 scipy

 中的 
cdist 并制作一个新的 DataFrame

from scipy.spatial.distance import cdist

res_df = pd.DataFrame(cdist(df1.T, df2.T), columns=df1.columns, index=df2.columns)

输出:

print(res_df)
​
          Anna       Bob       Cam
Dave  0.866025  1.658312  3.278719
Emma  2.179449  0.866025  1.658312
Fred  3.840573  2.179449  0.866025
© www.soinside.com 2019 - 2024. All rights reserved.