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

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

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

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

列表很长 – 30M行.

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

@H_403_5@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过滤:

@H_403_5@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 @H_403_5@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解决方案更慢:

@H_403_5@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

猜你在找的Python相关文章