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

前端之家收集整理的这篇文章主要介绍了Python:如何查找三元组用户访问过的三元组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个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
原文链接:https://www.f2er.com/python/438710.html

猜你在找的Python相关文章