我有一个像这样的DataFrame。
order_id product_id add_to_cart_order reordered user_id eval_set order_number order_dow order_hour_of_day days_since_prior_order
0 1 49302 1 1 112108 train 4 4 10 9.0
1 1 11109 2 1 112108 train 4 4 10 9.0
2 1 10246 3 0 112108 train 4 4 10 9.0
3 1 49683 4 0 112108 train 4 4 10 9.0
4 1 43633 5 1 112108 train 4 4 10 9.0
5 1 13176 6 0 112108 train 4 4 10 9.0
6 1 47209 7 0 112108 train 4 4 10 9.0
7 1 22035 8 1 112108 train 4 4 10 9.0
8 36 39612 1 0 79431 train 23 6 18 30.0
9 36 19660 2 1 79431 train 23 6 18 30.0
10 36 49235 3 0 79431 train 23 6 18 30.0
11 36 43086 4 1 79431 train 23 6 18 30.0
12 36 46620 5 1 79431 train 23 6 18 30.0
13 36 34497 6 1 79431 train 23 6 18 30.0
14 36 48679 7 1 79431 train 23 6 18 30.0
15 36 46979 8 1 79431 train 23 6 18 30.0
16 38 11913 1 0 42756 train 6 6 16 24.0
17 38 18159 2 0 42756 train 6 6 16 24.0
因此所有标记为order_id == 1的行都对应于1个订单。我想弄清楚用户下了多少个独特的订单。结果应如下所示:
user_id unique_orders
112108 1
79431 1
42756 1
很明显,我应该将order_id
分组。但是这里的积聚是什么?我需要做两个groupBys吗?最好的方法是什么?
答案 0 :(得分:0)
根据@Quang Hoang的建议
在评论中,该问题直接适用于GroupBy.nunique,
我添加了获得dataframe
所需的内容,如您的预期输出中所示:
df_nunique=df.groupby('user_id')['order_id'].nunique().rename('unique_orders').reset_index()
print(df_nunique)
user_id unique_orders
0 42756 1
1 79431 1
2 112108 1
答案 1 :(得分:0)
您可以尝试以下代码。看来len(unique())
的表现比nunique()
print(df.groupby('user_id')['order_id'].apply(lambda x: len(x.unique())))