计算曼哈顿距离并返回最低的 3 个距离



给定:

df = pd.DataFrame(np.random.randint(0,100, size= (10,4)), columns=list('ABCD'))
df['category']= ['apple','orange','grape','berry','strawberry','banana','kiwi','lemon','lime','pear']

我想让用户选择一个类别,比如"Apple",然后让我的函数计算 Apple 和所有其他类别之间的曼哈顿距离,并返回 3 个最接近的值(最小的差异(。我不确定如何编写一个调用数据帧中列的函数,但这就是我所拥有的:

def Manhattan_d(category_name):
return df['A'][0]-df['A'][1]+df['B'][0],(df['B'][1])+df['C'][0]-df['C'][1]+df['D'][0]

您可以使用apply来计算距离矩阵:

def distance(row):
cols = list('ABCD')
return (df[cols] - row[cols]).abs().sum(axis=1)
df.set_index('category', inplace=True)
dist = df.apply(distance, axis=1)

然后,您可以使用nsmallest提取所需类别的最接近类别:

dist['apple'].nsmallest(4)

您要考虑n = 4因为这里最接近的类别将是'apple'这是微不足道的。

最新更新