选择具有特定订单数量的用户 pandas

tec*_*har 1 python group-by dataframe pandas

我有一个带有user_idorder_number列的数据框。order_number由用户告诉第 n 个订单。我想选择完成了一定数量订单的用户。

示例数据帧:

user_id order_number
0   1   1
1   1   2
2   1   3
3   2   1
4   2   2
5   3   1
6   3   2
7   3   3
Run Code Online (Sandbox Code Playgroud)

输出: [1,3] 输出应该是user_id [1,3]因为他们做了3个订单但2个只做了2个订单。

我在尝试:

user_id order_number
0   1   1
1   1   2
2   1   3
3   2   1
4   2   2
5   3   1
6   3   2
7   3   3
Run Code Online (Sandbox Code Playgroud)

这给了我布尔系列,但如何选择只有 True 值的索引?

ank*_*_91 6

这样做的一般方法是使用df.loc[]or df.query

df.groupby(['user_id'],as_index=False)['order_number'].max().query("order_number==3")
#or
df.groupby(['user_id'],as_index=False)['order_number'].max().loc[
                                   lambda x: x['order_number']==3]
Run Code Online (Sandbox Code Playgroud)

对于此示例,您不必获得另一列的最大值,您可以像@Steven 建议的那样计算它们:

df.groupby('user_id',as_index=False).count().query("order_number==3")
Run Code Online (Sandbox Code Playgroud)

或者像@Wen 建议的那样:

df['user_id'].value_counts().loc[lambda x: x==3]
Run Code Online (Sandbox Code Playgroud)
   user_id  order_number
0        1             3
2        3             3
Run Code Online (Sandbox Code Playgroud)