是否可以将双矩阵列转换为列表或成对?

时间:2019-01-14 15:43:30

标签: python pandas

我正在使用此代码通过熊猫生成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

我该如何解决这个问题?预先谢谢你

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