问题:
我有多个长度不同的python列表,所有列表中只包含整数。
如何找到具有最多公共元素的2个列表?
示例输入:
list1 = [234, 982, 908, 207, 456, 284, 473]
list2 = [845, 345, 765, 678]
list3 = [120, 542, 764, 908, 217, 778, 999, 326, 456]
# thousands more lists ...
示例输出:
# 2 most similar lists:
list400, list6734
注意:我不是要找到列表中最常见的元素,只想知道哪两个列表最相似,即共同元素最多。我也不关心单个元素的相似度,一个元素要么在两个列表中都存在,要么不存在。
背景:
我有一个数据集,表示哪些用户在平台上点赞了某些帖子。如果两个用户都喜欢同一篇帖子,则它们的共同点赞分数为1。如果两个用户喜欢相同的10篇帖子,则它们的共同点赞分数为10。我的目标是找出具有最高共同点赞分数的两个用户。
我已经将数据(从CSV文件)加载到pandas数据框中,每一行表示用户和帖子之间的点赞关系:
索引 | 用户ID | 帖子ID |
---|---|---|
0 | 201 | 234 |
1 | 892 | 908 |
2 | 300 | 825 |
等等,还有成千上万行。
我的方法是按用户ID对数据进行分组,然后将每个用户的帖子连接成单个行/列,作为逗号分隔的字符串:
df = df[df['user id'].duplicated(keep=False)]
df['post id'] = df['post id'].astype(str)
df['liked posts'] = df.groupby('user id')['post id'].transform(lambda x: ','.join(x))
df = df.drop(columns=['post id'])
df = df[['user id', 'liked posts']].drop_duplicates()
得到的数据框如下:
索引 | 用户ID | 喜欢的帖子 |
---|---|---|
0 | 201 | 234,789,267, ... |
1 | 892 | 908,734,123, ... |
2 | 300 | 825,456,765, ... |
等等,这里用户ID是唯一的行标识符...
因此,我的问题是:我需要找出数据框中在“喜欢的帖子”列中具有最多共同数字的行,并返回具有最高common_like_score的2个用户。
如果有更好的解决方案,请也分享一下。