【问题标题】:Return index after calculating distance metric计算距离度量后的返回索引
【发布时间】:2018-09-28 03:48:44
【问题描述】:

给定一个具有 4 个特征和 1 个索引列的 DF:

df = pd.DataFrame(np.random.randint(0,100, size= (100,4)), columns=list('ABCD'))
df['index'] = range(1, len(df) + 1)

我想根据用户的输入计算曼哈顿距离。用户的输入将由 a,b,c,d 表示。函数定义如下。

def Manhattan_d(a,b,c,d):

    return (a - df['A']) + (b -df['B']) + (c - df['C']) + (d - df['D'])

当答案返回给我时,它会以列表的形式出现。现在,我想找到返回给我的最小值并将其链接回索引号。

如果我执行 return(min(formula)),我会得到一个数字的输出,但我无法将它定位回原来的索引。如果它更容易,索引代表一个类别。所以我需要在应用公式后找到输出最小的类别。

希望这很清楚。

【问题讨论】:

  • 由于你的函数Manhattan_d返回一个序列,你可以使用Manhattan_d(a,b,c,d).idxmin()来获取最小值的索引

标签: python pandas machine-learning similarity


【解决方案1】:

也许更好的方法是将曼哈顿距离应用于数据帧的每一行。此时,您可以使用.idxmin() 查找原始数据帧中与您输入函数的点 a、b、c、d 最相似(具有最低曼哈顿距离)的点的索引。

def Manhattan_d(a,b,c,d, df):
    return df.apply(lambda row:abs(row['A']-a)+abs(row['B']-b)+abs(row['C']-c)+abs(row['D']-d), axis=1).idxmin()

注意:曼哈顿距离需要差的绝对值,我已经包含在内。

另一个注意事项:将所有变量传递到函数中通常是一种好习惯,这就是为什么我将df 作为函数的输入。

另一种可能性是使用现有的实现,例如来自 Scikit-learn 的 DistanceMetric 类。

【讨论】:

  • 谢谢杰克!我是数据科学领域的新手,不知道什么是最佳实践。感谢您的反馈!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 2019-06-22
  • 2019-03-08
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 2019-05-26
相关资源
最近更新 更多