在熊猫数据框中获取成对的余弦相似度

时间:2019-07-26 16:07:17

标签: python pandas cosine-similarity

我需要为一个熊猫数据帧成对计算cosine_similarity并将其存储回另一个数据帧(熊猫)中。

到目前为止,我使用sklearn.metrics.pairwise的{​​{1}}计算相似度:

cosine_similarity

来自sim = cosine_similarity(df,dense_output=False)的样本:

sim

现在,我希望将其存储回具有以下结构的Pandas数据框中:

[[1.00000000 8.33333333 ... 8.72871561 8.72871561 8.72871561]
 [8.33333333 1.00000000 ... 7.63762616 7.63762616 7.63762616]]

我该怎么做?

2 个答案:

答案 0 :(得分:0)

创建索引,然后创建数据框

i, j = np.indices(sim.shape).reshape(2, -1)
mask = i != j
i = i[mask]
j = j[mask]

pd.DataFrame({
    'ID': df.index[i],
    'Pair_ID': df.index[j],
    'Sim_Value': sim[i, j]
})

答案 1 :(得分:0)

import numpy as np
import pandas as pd

def create_df(sim):
    df = pd.DataFrame(data=sim[0], columns=['Sim_Value'])
    df['Id'] = 1
    for x in range(1,sim.shape[0]):
        tdf = pd.DataFrame(data=sim[x], columns=['Sim_Value'])
        tdf['Id'] = x+1
        df = df.append(tdf)
    df['Pair_ID'] = df.index + 1
    df.reset_index(drop=True,inplace=True)
    return df