python/pandas/sklearn:从成对距离中获取最接近的匹配

2024-04-20 06:38:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,并试图通过三个类别的马氏距离来获得最接近的匹配,比如:

from io import StringIO
from sklearn import metrics
import pandas as pd

stringdata = StringIO(u"""pid,ratio1,pct1,rsp
    0,2.9,26.7,95.073615
    1,11.6,29.6,96.963660
    2,0.7,37.9,97.750412
    3,2.7,27.9,102.750412
    4,1.2,19.9,93.750412
    5,0.2,22.1,96.750412
    """)

stats = ['ratio1','pct1','rsp']
df = pd.read_csv(stringdata)

d = metrics.pairwise.pairwise_distances(df[stats].as_matrix(),
    metric='mahalanobis')

print(df)
print(d)

其中pid列是唯一标识符。在

我需要做的是使用pairwise_distances调用返回的ndarray并更新原始数据帧,以便每一行都有其最接近的N个匹配项的某种类型的列表(因此pid0可能有一个按距离排列的有序列表,如2、1、5、3、4(或其实际是什么),但我完全不知道在python中是如何做到这一点的。在


Tags: fromimport距离dfasstatspidmetrics
1条回答
网友
1楼 · 发布于 2024-04-20 06:38:35
from io import StringIO
from sklearn import metrics

stringdata = StringIO(u"""pid,ratio1,pct1,rsp
    0,2.9,26.7,95.073615
    1,11.6,29.6,96.963660
    2,0.7,37.9,97.750412
    3,2.7,27.9,102.750412
    4,1.2,19.9,93.750412
    5,0.2,22.1,96.750412
    """)

stats = ['ratio1','pct1','rsp']
df = pd.read_csv(stringdata)

dist = metrics.pairwise.pairwise_distances(df[stats].as_matrix(),
    metric='mahalanobis')
dist = pd.DataFrame(dist)
ranks = np.argsort(dist, axis=1)
df["rankcol"] = ranks.apply(lambda row: ','.join(map(str, row)), axis=1)
df

相关问题 更多 >