【问题标题】:pandas groupby and find most frequent value (mode)pandas groupby 并找到最常见的值(模式)
【发布时间】:2021-12-22 09:22:19
【问题描述】:

我有一个看起来像这样的数据框

user_id product_id  created_at
    1   100         2019-04-21 20:20:00
    1   100         2019-04-23 00:10:00
    1   200         2019-05-24 10:00:00
    1   200         2020-06-24 10:10:24
    2   100         2019-01-22 21:10:00
    2   200         2019-04-25 20:23:30
    2   300         2021-01-21 10:20:00
    3   400         2019-12-21 10:20:00
    3   400         2021-04-21 10:20:00

我正在尝试为每个user_id 找到购买最多的product_id。我知道我可以使用 groupby 和 value_countspd.Series.mode 来获得这个。像这样:

df.groupby(['user_id'])['product_id',].apply(lambda x: x.value_counts().index[0]).reset_index()

这工作正常,直到我达到一个 user_id 有两个或更多 product_id 具有相同的计数(如在示例数据帧中)。发生这种情况时,理想情况下我想选择具有最新created_atproduct_id。所以例如。对于user_id 1,我想选择product_id 200,因为它是最近购买的。

实现这一目标的最佳方式是什么?

【问题讨论】:

    标签: python python-3.x pandas dataframe numpy


    【解决方案1】:

    您可以在日期上同时计算 countmax,然后对这些值进行排序并删除重复项(或使用 groupby().head()):

    s = df.groupby(['user_id','product_id'])['created_at'].agg(['count','max'])
    s.sort_values(['count','max'], ascending=False).groupby('user_id').head(1)
    

    输出:

                        count                  max
    user_id product_id                            
    3       400             2  2021-04-21 10:20:00
    1       200             2  2020-06-24 10:10:24
    2       300             1  2021-01-21 10:20:00
    

    【讨论】:

      【解决方案2】:
      df.\
      sort_values("created_at", ascending=False).\
      groupby(["user_id", "product_id"], sort=False, as_index=False).\
      count().\
      groupby("user_id", as_index=False).\
      head(1)
      
      #   user_id  product_id  created_at
      # 0       1         200           2
      # 1       2         300           1
      # 2       3         400           2
      

      【讨论】:

        猜你喜欢
        • 2013-02-19
        • 2018-11-08
        • 1970-01-01
        • 2017-12-02
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        相关资源
        最近更新 更多