tec*_*har 1 python group-by dataframe pandas
我有一个带有user_id和order_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 值的索引?
这样做的一般方法是使用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)