计算距离度量后返回指数



给定一个具有 4 个特征和 1 个索引列的 DF :

df = pd.DataFrame(np.random.randint(0,100, size= (100,4)), columns=list('ABCD'))
df['index'] = range(1, len(df) + 1)

我想计算给定用户输入的曼哈顿距离。用户的输入将由a,b,c,d表示。该函数定义如下。

def Manhattan_d(a,b,c,d):
return (a - df['A']) + (b -df['B']) + (c - df['C']) + (d - df['D'])

当答案返回给我时,它会以列表的形式出现。现在,我想找到返回给我的最小值,并将其链接回其来源的索引号。

如果我确实返回(min(formula((,我会得到一个数字的输出,但我无法将其定位回它最初来自的索引。如果比较容易,索引表示一个类别。所以我需要在应用公式后找到输出最小的类别。

希望这是清楚的。

也许更好的方法是将曼哈顿距离应用于数据帧的每一行。此时,您可以使用.idxmin()查找原始数据帧中与输入函数的点 a、b、c、d 最相似(曼哈顿距离最低(的点的索引。

def Manhattan_d(a,b,c,d, df):
return df.apply(lambda row:abs(row['A']-a)+abs(row['B']-b)+abs(row['C']-c)+abs(row['D']-d), axis=1).idxmin()

注意:曼哈顿距离需要差值的绝对值,我已经包括在内。

另一个注意事项:将所有变量传递到函数中通常是很好的做法,这就是为什么我将df作为函数的输入包含在内的原因。

另一种可能性是使用现有的实现,例如来自Scikit-learn的DistanceMetric类。

最新更新