【问题标题】:How to aggregate groupBy by another column's value pandas [duplicate]如何通过另一列的值 pandas 聚合 groupBy [重复]
【发布时间】:2020-02-05 05:08:00
【问题描述】:

我有一个这样的 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。但是这里的 agg 是什么?我需要做两个 groupBys 吗?最好的方法是什么?

【问题讨论】:

  • df.groupby('user_id').order_id.nuniques()?

标签: python pandas


【解决方案1】:

按照@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

【讨论】:

    【解决方案2】:

    您可以尝试使用以下代码。看来len(unique())的表现比nunique()

    print(df.groupby('user_id')['order_id'].apply(lambda x: len(x.unique())))
    

    【讨论】:

    • apply之前,您没有关闭引用列中的单引号
    • 已编辑,感谢指正。
    • 为什么 nunique 不起作用?
    • 我得到了预期的输出
    • 我从未说过它不起作用。我说它表现更好。 stackoverflow.com/questions/15411158/…
    猜你喜欢
    • 2018-03-01
    • 2017-07-02
    • 2018-06-02
    • 2020-03-07
    • 2021-05-17
    • 2017-12-25
    • 2021-11-01
    • 2019-10-12
    • 2017-07-20
    相关资源
    最近更新 更多