如何通过另一列的值熊猫汇总groupBy

时间:2019-10-07 21:34:09

标签: python pandas

我有一个像这样的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吗?最好的方法是什么?

2 个答案:

答案 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())))