首页 > 解决方案 > 如何通过另一列的值 pandas 聚合 groupBy

问题描述

我有一个像这样的数据框。

         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

很明显,我应该 groupBy order_id。但是这里的 agg 是什么?我需要做两个 groupBys 吗?做这个的最好方式是什么?

标签: pythonpandas

解决方案


正如评论中@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

推荐阅读