我正在使用此代码通过熊猫生成Jaccard相似度。
这是我的数据框示例
doc1 doc2 all_doc
BD 10 ID8
BD 16 ID7
BD 14 ID6
BD 24 ID5
.
.
.
BC 90 IDN
由该代码创建的
df = df_doc1.merge(df_doc2, on='all_doc', how='outer').set_index(['doc1','doc2'])
df = df.reset_index()
df = df.drop_duplicates()
df = df.reset_index(drop=True)
df
然后我通过此代码计算Jaccard
sim_prepared = df.set_index(['doc1', 'doc2'])
sim_prepared = sim_prepared[sim_prepared.all_doc != '0']
sim_prepared
sim_mat = pd.get_dummies(sim_prepared.all_doc).sort_index(level=0).max(level=[0,1])
grp=sim_mat
dist = pdist(grp, metric="jaccard")
s_dist = squareform(dist)
sim = np.subtract(1, s_dist)
sim_df = pd.DataFrame(sim, columns=grp.index, index=grp.index)
sim_df
我得到了这个矩阵
doc1 BD BD BD BD
doc2 10 16 14 24
doc1 doc2
BD 10 1 0.4 0.1 0.3
BD 16 0.1 1 0.3 0.4
BD 14 0.5 0.1 1 0.3
BD 24 0.8 0.9 0.4 1
.
.
.
我希望看到结果变成这样(只是成对,列表或顺序) 例如
[(BD/10),(BD/10)] 1
[(BD/10),(BD/16)] 0.4
[(BD/10),(BD/14)] 0.1
[(BD/10),(BD/24)] 0.3
.
.
.
[(BD/24,(BD/24)] 1
我该如何解决这个问题?预先谢谢你
答案 0 :(得分:1)
从您的MultiIndices中删除级别,使它们成为元组,然后堆叠。
rowid
输入数据:sim_df.index = [*sim_df.index]
sim_df.columns = [*sim_df.columns]
sim_df.stack()
(BD, 10) (BD, 10) 1.0
(BD, 14) 0.4
(BD, 16) 0.1
(BD, 24) 0.3
(BD, 14) (BD, 10) 0.1
(BD, 14) 1.0
(BD, 16) 0.3
(BD, 24) 0.4
(BD, 16) (BD, 10) 0.5
(BD, 14) 0.1
(BD, 16) 1.0
(BD, 24) 0.3
(BD, 24) (BD, 10) 0.8
(BD, 14) 0.9
(BD, 16) 0.4
(BD, 24) 1.0
dtype: float64
sim_df