gpt4 book ai didi

python - Pandas 与唯一索引/列组合字典的相关矩阵

转载 作者:行者123 更新时间:2023-12-04 10:12:15 27 4
gpt4 key购买 nike

我在 Pandas 上使用这个数据集,我目前停留在这一步:

我有一个看起来像这样的数据框:

     id1   id2   id3   id4
id1 1 0.3 0.5 0.2
id2 0.2 1 0.4 0.7
id3 0 0.5 1 0.8
id4 0.6 0.1 0 1

现在, id<num>post_id与每条消息相关联。上面的余弦相似度矩阵是一个二维数组,我做了一些工作来找到这些不同消息之间的余弦相似度得分。

最终目标是在 UI 上显示并聚合看起来彼此相似的帖子。为此,我需要 id1 中的分数概览。和 id2 , 和 id1id3等等。

但是,我现在有一个 1 的对角线(这是有道理的,因为它们是相同的),但是我怎样才能以更好的方式做到这一点,这样我就不必使用双循环,并最终将它带到一个状态我可以在数据框中像下面这样显示它。

我目前正在做的事情给了我这个:
id1, id1, score
id1, id2, score
id1, id3, score
id1, id4, score
id2, id1, score
id2, id2, score
id2, id3, score
id2, id4, score
id3, id4, score
id3, id1, score
id3, id2, score
id3, id3, score
id4, id1, score
id4, id2, score
id4, id3, score
id4, id4, score

我想要得到的是:
id1, id2, score
id1, id3, score
id1, id4, score
id2, id3, score
id2, id4, score
id3, id4, score

我怎样才能做到这一点?我应该将二维矩阵 reshape 为数组吗?我觉得我在这里遗漏了一些东西。

感谢您在这个问题上的帮助。

最佳答案

您可以插入 NaN s 在数据帧的上三角部分, stack 删除那些 NaN s 并从 pd.Series.iteritems 返回的迭代器构建一个字典:

a = df.values
a[np.tril_indices(a.shape[0], 0)] = np.nan
df[:] = a # or directly create a new one -> pd.Dat...(a, index=df.index...)
out = dict(df.stack().iteritems())
print(out)
{('id1', 'id2'): 0.3,
('id1', 'id3'): 0.5,
('id1', 'id4'): 0.2,
('id2', 'id3'): 0.4,
('id2', 'id4'): 0.7,
('id3', 'id4'): 0.8}

请注意,与
a = df.values
a[np.tril_indices(a.shape[0], 0)] = np.nan

你忽略了你已经拥有的相似之处:
print(a)

[[nan 0.3 0.5 0.2]
[nan nan 0.4 0.7]
[nan nan nan 0.8]
[nan nan nan nan]]

因此,通过更新数据框和堆叠,您最终会得到感兴趣的组合:
df[:] = a
df.stack()

id1 id2 0.3
id3 0.5
id4 0.2
id2 id3 0.4
id4 0.7
id3 id4 0.8
dtype: float64

关于python - Pandas 与唯一索引/列组合字典的相关矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61268949/

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