给出如下用户表:

   user       query
0    a1      orange
1    a1  strawberry
2    a1        pear
3    a2      orange
4    a2  strawberry
5    a2       lemon
6    a3      orange
7    a3      banana
8    a6        meat
9    a7        beer
10   a8       juice

我想按user分组,并将其汇总为query的列表,然后 Select 前两项,如果超过两项,则预期结果为

  user                        query
0   a1         [orange, strawberry]
1   a2         [orange, strawberry]
2   a3             [orange, banana]
3   a6                       [meat]
4   a7                       [beer]
5   a8                      [juice]

使用下面的代码

df_user = pd.DataFrame( {'user': {0: 'a1', 1: 'a1', 2: 'a1', 3: 'a2', 
                                  4: 'a2', 5: 'a2', 6: 'a3', 7: 'a3', 
                                  8: 'a6', 9: 'a7', 10: 'a8'}, 
                         'query': {0: 'orange', 1: 'strawberry', 
                                   2: 'pear', 3: 'orange', 4: 'strawberry', 
                                   5: 'lemon', 6: 'orange', 7: 'banana', 
                                   8: 'meat', 9: 'beer', 10: 'juice'}} )

print(df_user.groupby(['user'], as_index=False).agg(list))

我设法得到了

  user                        query
0   a1   [orange, strawberry, pear]
1   a2  [orange, strawberry, lemon]
2   a3             [orange, banana]
3   a6                       [meat]
4   a7                       [beer]
5   a8                      [juice]

获得理想结果的好方法是什么?

推荐答案

这里有一个方法:

out = df[df.groupby('user').cumcount()<2].groupby('user', as_index=False).agg(list)

输出:

  user                 query
0   a1  [orange, strawberry]
1   a2  [orange, strawberry]
2   a3      [orange, banana]
3   a6                [meat]
4   a7                [beer]
5   a8               [juice]
​

Python-3.x相关问答推荐

类型的可变性对变量的作用域有影响吗?

pandas查找另一列中是否存在ID

泛型类型的参数的静态类型

为什么空列表也能起作用?

从 LeetCode 的 Python 解决方案类中理解关键字 self

Python 列表求和所有出现的保留顺序

为什么最简单的流光示例会出错?

Semaphore信号量 Python 的工作原理

类型提示和链式赋值以及多重赋值

具有 2 个输入的 python 3 map/lambda 方法

Python - 使用 OpenCV 将字节图像转换为 NumPy 数组

ValueError:找不到子字符串,我做错了什么?

如何从字典中打印特定键值?

Python 类型提示语法如何/为什么起作用?

IronPython 3 支持?

登录csv文件的正确方法是什么?

AttributeError:系列对象没有属性iterrows

带有数千个逗号刻度标签的 MatPlotLib 美元符号

字典理解中的操作顺序

TypeError:无法将系列转换为