我正在尝试计算python中两个数据集之间的欧几里得距离。 我可以使用以下方法做到这一点:
np.linalg.norm(df-signal)
其中df
和signal
是我的两个数据集。
这将返回单个数值(即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还是很陌生,所以非常感谢任何可能的帮助。
答案 0 :(得分:2)
要使列标题具有列规范,可以将pandas.DataFrame.aggregate与np.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倍。