Pandas数据帧中行的余弦相似性

2024-10-01 11:27:10 发布

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

我计算了一个数据帧的余弦相似性,如下所示:

ciiu4n4  A0111  A0112  A0113   
 A0111      14      7      6 
 A0112      16     55      3 
 A0113      15      0    112 

使用此代码:

^{pr2}$

我得到一个这样的数组:

[[ 1.          0.95357118  0.95814892 ]
 [ 0.95357118  1.          0.89993795 ]
 [ 0.95814892  0.89993795  1.         ]]

但是,我需要的结果是一个类似于原始数据帧的数据帧。我不能手动操作,因为原始数据帧是600 x 600。在

我需要的结果应该类似于:

ciiu4n4   A0111        A0112        A0113       
 A0111    1.           0.95357118   0.95814892
 A0112    0.95357118   1.           0.89993795
 A0113    0.95814892   0.89993795   1.  

Tags: 数据代码原始数据数组手动相似性pr2a0112
1条回答
网友
1楼 · 发布于 2024-10-01 11:27:10

我建议你稍微改变一下方法。不需要删除任何列。相反,将第一列设置为索引,计算余弦相似度,并将结果数组分配回dataframe。在

df = df.set_index('ciiu4n4')
df

         A0111  A0112  A0113
ciiu4n4                     
A0111       14      7      6
A0112       16     55      3
A0113       15      0    112

^{pr2}$


上面的解决方案只有在行数和列数(不包括第一行)相同的情况下才有效。所以,这里有另一个可以推广到任何场景的解决方案。在

df = df.set_index('ciiu4n4')
v = cosine_similarity(df.values)

df = pd.DataFrame(v, columns=df.index.values, index=df.index).reset_index()
df

  ciiu4n4     A0111     A0112     A0113
0   A0111  1.000000  0.953571  0.958149
1   A0112  0.953571  1.000000  0.899938
2   A0113  0.958149  0.899938  1.000000

或者,使用df.insert-

df = pd.DataFrame(v, columns=df.index.values)
df.insert(0, 'ciiu4n4', df.index)
df

  ciiu4n4     A0111     A0112     A0113
0   A0111  1.000000  0.953571  0.958149
1   A0112  0.953571  1.000000  0.899938
2   A0113  0.958149  0.899938  1.000000

相关问题 更多 >