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或任何其他库.
最佳答案
您可以使用
原文链接:https://www.f2er.com/python/438710.htmltransform
大小,然后按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