Python 如何找到与数据帧的其他行之间总距离最小的行
我有如下的Python 如何找到与数据帧的其他行之间总距离最小的行,python,pandas,distance,Python,Pandas,Distance,我有如下的dataframe: df: Unnamed: 0 0 1 2 3 4 0 -527.0 143.0 143.0 248.0 -952.0 1 -527.0 143.0 143.0 248.0 -955.0 2 -527.0 143.0 143.0 248.0 -955.0 我使用mlpy.dtw\u std计算行之间的距离矩阵: dm = pdist ( df, lambda u,v: mlpy.dtw_std (
dataframe
:
df:
Unnamed: 0 0 1 2 3 4
0 -527.0 143.0 143.0 248.0 -952.0
1 -527.0 143.0 143.0 248.0 -955.0
2 -527.0 143.0 143.0 248.0 -955.0
我使用mlpy.dtw\u std
计算行之间的距离矩阵:
dm = pdist ( df, lambda u,v: mlpy.dtw_std ( pd.Series ( u ).dropna ().values.tolist (),pd.Series ( v ).dropna ().values.tolist (), dist_only=True ) )
distance_matrix=scipy.spatial.distance.squareform(dm)
如何找到与数据帧其他成员之间总距离最小的行索引(第一列(Unnamed:0
)
以下是距离矩阵:
[[ 0. 3. 3.]
[ 3. 0. 0.]
[ 3. 0. 0.]]
您可以首先将距离矩阵转换为
numpy
数组(如果尚未转换),然后
df['dist'] = dm.mean(axis = 0)
df[df.dist == min(df.dist)]
将行平均距离保存为列,然后
df['dist'] = dm.mean(axis = 0)
df[df.dist == min(df.dist)]
将为您提供与其他人之间最小平均距离的行。要获取索引,只能选择第一列,如下所示:
df[df.dist == min(df.dist)].iloc[:,0]
一旦你得到每行的总距离,比如说你把它命名为
dist
,类似这样的东西就会做到:df.loc[df.dist==min(df.dist)]
,但是我不能复制你的距离矩阵,我得到了以下错误:AttributeError:“module”对象没有属性“dtw\u std”
。它来自mlpy
库实际上,如果您共享dm
的外观,它将非常有帮助。这样我就不必重新计算它了。不需要计算距离矩阵,如果我有一行具有最小值,我只需要一行作为答案,我已经添加了距离矩阵值,那该怎么办