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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。