【发布时间】: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_counts 或 pd.Series.mode 来获得这个。像这样:
df.groupby(['user_id'])['product_id',].apply(lambda x: x.value_counts().index[0]).reset_index()
这工作正常,直到我达到一个 user_id 有两个或更多 product_id 具有相同的计数(如在示例数据帧中)。发生这种情况时,理想情况下我想选择具有最新created_at 的product_id。所以例如。对于user_id 1,我想选择product_id 200,因为它是最近购买的。
实现这一目标的最佳方式是什么?
【问题讨论】:
标签: python python-3.x pandas dataframe numpy