首页 > 解决方案 > 计算曼哈顿距离并返回最低的 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]

标签: pythonpandasdataframe

解决方案


您可以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'是微不足道的。


推荐阅读