两个 pandas 数据帧之间的欧几里德距离

Qub*_*bix 9 scipy dataframe pandas

我有两个数据框:

df1形式的

user_id  | x_coord  | y_coord
 214         -55.2      22.1
 214         -55.2      22.1
 214         -55.2      22.1
...
Run Code Online (Sandbox Code Playgroud)

df2,具有相同的形式,但具有不同的用户:

user_id  | x_coord  | y_coord
 512         -15.2      19.1
 362          65.1      71.4
 989         -84.8      13.7
...
Run Code Online (Sandbox Code Playgroud)

我的想法是,我想找到 中的用户df1和 中的所有用户之间的欧几里德距离df2。为此,我需要能够根据最后两列计算两个数据帧之间的欧几里德距离,以便找出第二个数据帧中与用户 214 最近的用户。

我找到了这个答案,但这不是我需要的,因为我的两个数据帧具有相同的形状,并且我需要以每行方式计算距离:

Euclidean_Distance_i(row_i_df1, row_i_df2)
Run Code Online (Sandbox Code Playgroud)

并将所有这些距离保存在与这些数据帧长度相同的列表中。

Qua*_*ang 10

尝试:

def Euclidean_Dist(df1, df2, cols=['x_coord','y_coord']):
    return np.linalg.norm(df1[cols].values - df2[cols].values,
                   axis=1)
Run Code Online (Sandbox Code Playgroud)

测试:

df1 = pd.DataFrame({'user_id':[214,214,214],
                'x_coord':[-55.2,-55.2,-55.2],
                'y_coord':[22.1,22.1,22.1]})

df2 = pd.DataFrame({'user_id':[512, 362, 989],
                    'x_coord':[-15.2, 65.1, -84.8],
                    'y_coord':[19.1, 71.4, 13.7]})

Euclidean_Dist(df1, df2)
Run Code Online (Sandbox Code Playgroud)

输出:

array([ 40.11234224, 130.0099227 ,  30.76881538])
Run Code Online (Sandbox Code Playgroud)