每两行的Pandas数据帧组合

2024-09-28 20:47:45 发布

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

我正在实现一个聚类算法,它需要计算每对数据点之间的距离,其中每个数据点都作为一行存储在pd.数据帧. 总的计算是按O(n^2)的顺序增长的,为了有效地计算,我必须小心谨慎。在

什么是做我想做的事的有效方法?在

假设我在一个数据帧中有4个数据点:

#<inputtable tin>
Id    Label 
0     Michael
1     Jim
2     Pam
3     Dwight

我需要运行一个定制函数similar(x,y)来计算每两点组合(2,4)~6之间的折扣,我的输出应该如下所示:

^{pr2}$

我所做的:

我试着用pd合并为表生成笛卡尔积

data = pd.DataFrame([[0, 'Michael'], [1, 'Jim'], [2, 'Pam'], [3, 'Dwight']], columns=['Id', 'Label'])
data['tmp'] = 1
result = pd.merge(data, data, left_on='tmp', right_on='tmp')
result = result[result['Id_x'] != result['Id_y']]
print result

不过,这看起来真的像是一个围绕合并的黑客,我也尝试了itertools和combination,这对Pandas不太好用。在

有谁知道一种更有效的方法来使用定制的相似距离函数来完成这种“聚类工作”?我还计划在盖菲分析这一点,我不知道是否有更好的解决办法。在


Tags: 数据方法函数id距离data聚类result
1条回答
网友
1楼 · 发布于 2024-09-28 20:47:45

首先
我解决不了这个问题。在

itertools.combination

from itertools import combinations

labels = df.Label.values.tolist()

f = lambda x, y: x + y

pd.Series({k: f(*k) for k in combinations(labels, 2)})

np.triu_indices

^{pr2}$

相关问题 更多 >