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

标签 python pandas dataframe

给定:

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',这是微不足道的。

关于python - 计算曼哈顿距离并返回最低的 3 个距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52615346/

相关文章:

python - 机器学习加权调整

python - 为什么 pandas DataFrame 中的列在此循环中不起作用?

python - Pandas 选择具有特定列中前 2 个值之一的所有行

python - 带有错误代码和错误消息的自定义 Python 异常

python - 在保持值(value)关联的同时在 Pandas 中重新采样

python - 对数据框进行排序并使用百分比计算值

python - 如何根据 python pandas 中不同行的字符串形式创建新列

Python DataFrame : Replace values using dictionary, 如果不在字典中则转换 NaN

python - 我的 for 循环没有根据条件删除数组中的项目? Python

python - 两个数据框中按索引的公共(public)元素数