在Python中计算和使用欧几里得距离

时间:2020-04-11 11:25:48

标签: python pandas numpy euclidean-distance

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

np.linalg.norm(df-signal)

其中dfsignal是我的两个数据集。 这将返回单个数值(即8258155.579535276),这很好。 我的问题是我希望它返回数据集中各列之间的差。像这样:

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还是很陌生,所以非常感谢任何可能的帮助。

1 个答案:

答案 0 :(得分:2)

要使列标题具有列规范,可以将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倍。