我正在寻找创建一个函数来计算选定类别与数据集中所有其他类别之间的曼哈顿距离。然后,该函数应返回与所选距离最小的 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"]
2 回答

LEATH
TA贡献1936条经验 获得超6个赞
一种选择是使用功能cityblock的scipy.spatial.distance:
from scipy.spatial import distance
df.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']
基本上,您可以获得从每一行到所选行的距离。然后删除包含所选标签的行并选择最小距离的索引。
添加回答
举报
0/150
提交
取消