计算距离最低的曼哈顿距离返回类别

我正在寻找创建一个函数来计算选定类别与数据集中所有其他类别之间的曼哈顿距离。然后,该函数应返回与所选距离最小的 CATEGORY。


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']

下面的代码返回最小的 4 个距离,其中包括所选类别(距离 = 0;这是多余的,不需要)。我需要代码只返回最低的 3 个距离作为类别列表,第一个是最小的。


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)


dist['apple'].nsmallest(4)

例如,如果选择了“Apple”,并且离苹果最近的三个距离是 Berry、Orange 和 Grape,则返回应该是这样的:["Berry", "Orange","Grape"]


慕的地10843
浏览 119回答 2
2回答

LEATH

一种选择是使用功能cityblock的scipy.spatial.distance:from scipy.spatial import distancedf.set_index('category', inplace = True)>> df.apply(lambda x: distance.cityblock(x, df.loc['apple',:]), axis=1        ).drop('apple', axis=1).nsmallest(4).index.values.tolist() ['strawberry', 'berry', 'kiwi', 'orange']基本上,您可以获得从每一行到所选行的距离。然后删除包含所选标签的行并选择最小距离的索引。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python