gpt4 book ai didi

python - 计算 pandas 数据帧行之间的相似度

转载 作者:行者123 更新时间:2023-11-30 23:14:17 27 4
gpt4 key购买 nike

目标是识别数据帧中每行的前 10 个相似行。

我从以下字典开始:

import pandas as pd
import numpy as np
from scipy.spatial.distance import cosine

d = {'0001': [('skiing',0.789),('snow',0.65),('winter',0.56)],'0002': [('drama', 0.89),('comedy', 0.678),('action',-0.42) ('winter',-0.12),('kids',0.12)],'0003': [('action', 0.89),('funny', 0.58),('sports',0.12)],'0004': [('dark', 0.89),('Mystery', 0.678),('crime',0.12), ('adult',-0.423)],'0005': [('cartoon', -0.89),('comedy', 0.678),('action',0.12)],'0006': [('drama', -0.49),('funny', 0.378),('Suspense',0.12), ('Thriller',0.78)],'0007': [('dark', 0.79),('Mystery', 0.88),('crime',0.32), ('adult',-0.423)]}

为了将其放入数据框中,我执行以下操作:

col_headers = []
entities = []
for key, scores in d.iteritems():
entities.append(key)
d[key] = dict(scores)
col_headers.extend(d[key].keys())
col_headers = list(set(col_headers))

填充数据框:

df = pd.DataFrame(columns=col_headers, index=entities)
for k in d:
df.loc[k] = pd.Series(d[k])
df.fillna(0.0, axis=1)

除了我在代码的主要目标之外的问题之一是我的数据帧仍然具有 NaN。这可能是我的结果矩阵充满 NaN 的原因。

     Mystery drama  kids winter  funny  snow crime  dark sports Suspense  adult skiing action comedy cartoon Thriller
0004 0.678 NaN NaN NaN NaN NaN 0.12 0.89 NaN NaN -0.423 NaN NaN NaN NaN NaN
0005 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.12 0.678 -0.89 NaN
0006 NaN -0.49 NaN NaN 0.378 NaN NaN NaN NaN 0.12 NaN NaN NaN NaN NaN 0.78
0007 0.88 NaN NaN NaN NaN NaN 0.32 0.79 NaN NaN -0.423 NaN NaN NaN NaN NaN
0001 NaN NaN NaN 0.56 NaN 0.65 NaN NaN NaN NaN NaN 0.789 NaN NaN NaN NaN
0002 NaN 0.89 0.12 -0.12 NaN NaN NaN NaN NaN NaN NaN NaN -0.42 0.678 NaN NaN
0003 NaN NaN NaN NaN 0.58 NaN NaN NaN 0.12 NaN NaN NaN 0.89 NaN NaN NaN

要计算余弦相似度并生成行之间的相似度矩阵,我执行以下操作:

data = df.values
m, k = data.shape

mat = np.zeros((m, m))

for i in xrange(m):
for j in xrange(m):
if i != j:
mat[i][j] = cosine(data[i,:], data[j,:])
else:
mat[i][j] = 0.

这是垫子的样子:

[[  0.  nan  nan  nan  nan  nan  nan]
[ nan 0. nan nan nan nan nan]
[ nan nan 0. nan nan nan nan]
[ nan nan nan 0. nan nan nan]
[ nan nan nan nan 0. nan nan]
[ nan nan nan nan nan 0. nan]
[ nan nan nan nan nan nan 0.]]

假设 NaN 问题得到修复,并且 mat 吐出含义完整的相似性矩阵。如何获得如下输出:

{0001:[003,005,002],0002:[0001, 0004, 0007]....}

最佳答案

One of the issue in addition to my main goal that I have at this point of the code is my dataframe still has NaN.

这是因为 df.fillna 不会修改 DataFrame,而是返回一个新的 DataFrame。修复它,你的结果就会很好。

关于python - 计算 pandas 数据帧行之间的相似度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28883303/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com