1

我有一个数据框,我想成对应用我自己的距离。myDistance 需要 2 个数据帧并使用 skelarn pairwise_distance 或 scipy pdist 转换的问题是 ndarray。例子:

df = pd.DataFrame([[1,2,3,3],[2,3,3,4],[4,1,3,2]],columns=['A','B','C','D'])

这将返回:

    A   B   C   D
0   1   2   3   3
1   2   3   3   4
2   4   1   3   2

然后:

def myDistance(f1,f2):
    return f1['A']-f2['A']

myDistance(df.loc[0],df.loc[1])

这有效并返回-1。
但这不是,因为 pdist 将 df 行视为 ndarray

from scipy.spatial.distance import pdist
dist = pdist(df,myDistance)

IndexError:只有整数、切片 ( :)、省略号 ( ...)、numpy.newaxis ( None) 和整数或布尔数组是有效的索引

4

1 回答 1

0

我想我理解你的问题。您基本上只想计算A数据框列上的成对距离。在这种情况下,假设 columnA是两个数据框的第一列,那么您希望将自定义函数更改为:

def myDistance(u, v):
    return((u - v)[0])  # get the 0th index, which corresponds to column A

现在运行:

dist = pdist(df, myDistance)

结果:

array([-1., -3., -2.])
于 2018-01-24T13:17:35.373 回答