我有一個看起來像這樣的資料框
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
我試圖找到product_id每個user_id. 我知道我可以同時使用 groupbyvalue_counts或pd.Series.mode來獲得它。像這樣:
df.groupby(['user_id'])['product_id',].apply(lambda x: x.value_counts().index[0]).reset_index()
這很好用,直到我達到user_id具有product_id相同計數的兩個或更多(如示例資料幀中)。發生這種情況時,理想情況下我想選擇product_id最新的created_at. 所以對于例如。對于user_id1,我想選擇product_id200,因為它是最近購買的。
實作這一目標的最佳方法是什么?
uj5u.com熱心網友回復:
您可以同時計算count和max日期,然后對這些值進行排序并洗掉重復項(或使用 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
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/355118.html
上一篇:具有三個未知數的三個非線性方程-如何用f.solve求解?
下一篇:為什么要多次插入元素?
