在 pandas 数据帧中获取成对余弦相似度

Get pairwise cosine similarity in pandas dataframe

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

截至目前,我使用 sklearn.metrics.pairwisecosine_similarity:

计算相似度

sim = cosine_similarity(df,dense_output=False)

示例来自 sim:

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

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

ID  Pair_ID  Sim_Value
1   1        1.00
1   2        8.33
.
.
.
.
2   1        8.33

我该怎么做?

创建索引然后创建数据框

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]
})
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