在 Python 中计算和使用欧氏距离

Calculating and using Euclidean Distance in Python

我正在尝试计算 python 中两个数据集之间的欧氏距离。 我可以使用以下方法做到这一点:

np.linalg.norm(df-signal)

dfsignal 是我的两个数据集。 return 是一个单一的数值(即 8258155.579535276),这很好。 我的问题是我希望它 return 数据集中每一列之间的差异。像这样:

AFNLWGT     4.867376e+10
AGI         3.769233e+09
EMCONTRB    1.202935e+07
FEDTAX      8.095078e+07
PTOTVAL     2.500056e+09
STATETAX    1.007451e+07
TAXINC      2.027124e+09
POTHVAL     1.158428e+08
INTVAL      1.606913e+07
PEARNVAL    2.038357e+09
FICA        1.080950e+07
WSALVAL     1.986075e+09
ERNVAL      1.905109e+09

我是 Python 的新手,非常感谢任何可能的帮助。

要使列 headers 具有按列范数,您可以将 pandas.DataFrame.aggregatenp.linalg.norm 一起使用:

import pandas as pd
import numpy as np

norms = (df-signal).aggregate(np.linalg.norm)

请注意,默认情况下,.aggregate 沿着 0 轴(因此是列)运行。

然而,这将比 numpy 实现慢得多:

norms = pd.Series(np.linalg.norm(df.to_numpy()-signal.to_numpy(), axis=0), 
                  index=df.columns)

对于大小为 100x2 的测试数据,后者快 20 倍。