加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python:如何查找三元组用户访问过的三元组

发布时间:2020-12-16 22:42:25 所属栏目:Python 来源:网络整理
导读:我有一个CSV文件,其中包含用户访问的项目列表,例如: user_id item_id370 293471 380280 100280 118219 118... 列表很长 30M行. 我需要找到三个用户访问过的项目的三元组(即所有三个用户都访问了所有三个项目).这种三胞胎很少见.我试图找到的示例结果: user

我有一个CSV文件,其中包含用户访问的项目列表,例如:

user_id item_id
370 293
471 380
280 100
280 118
219 118
...

列表很长 – 30M行.

我需要找到三个用户访问过的项目的三元组(即所有三个用户都访问了所有三个项目).这种三胞胎很少见.我试图找到的示例结果:

user_id item_id
1  15
1  26
1  31
77 15
77 26
77 31
45 15
45 26
45 31

有什么好办法呢?我可以使用Pandas或任何其他库.

最佳答案
您可以使用transform大小,然后按boolean indexing过滤:

print (df)
    user_id  item_id
0         1       15
1         1       26
2         1       31
3        77       15
4        77       26
5        77       31
6        45       15
7        45       26
8        45       31
9       370      293
10      471      380
11      280      100
12      280      118
13      219      118
print (df.groupby('user_id')['item_id'].transform('size'))
0     3
1     3
2     3
3     3
4     3
5     3
6     3
7     3
8     3
9     1
10    1
11    2
12    2
13    1
Name: item_id,dtype: int64

print (df[df.groupby('user_id')['item_id'].transform('size') == 3])
   user_id  item_id
0        1       15
1        1       26
2        1       31
3       77       15
4       77       26
5       77       31
6       45       15
7       45       26
8       45       31

使用filtration的解决方案更慢:

df = df.groupby('user_id').filter(lambda x: len(x.item_id) == 3)
print (df)
   user_id  item_id
0        1       15
1        1       26
2        1       31
3       77       15
4       77       26
5       77       31
6       45       15
7       45       26
8       45       31

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读