Pandas 按列分组并按日期排序并仅获取最新行

Pandas groupby a column and sort by date and get only the latest row

我需要单独按 user_id 分组并显示最新日期的 content_id。 当我像下面这样尝试时,其中一个用户获得了正确的值,但另一个用户 (123) 获得了错误的值。预期是 content_id - 20,但即将到来的是 21。 请帮忙解决这个问题。

示例数据:

data = {'user_id':['123', '123', '234', '234'],
        'content_id':[20, 21, 19, 18],
        'date':['2020-10-14', '2019-01-25','2021-05-26','2018-03-26']}
 

df = pd.DataFrame(data)
df


    user_id content_id  date
0   123     20          2020-10-14
1   123     21          2019-01-25
2   234     19          2021-05-26
3   234     18          2018-03-26


df.sort_values(['user_id','content_id','date']).groupby(['user_id'])['content_id','date'].last()


user_id content_id  date
        
123     21         2019-01-25
234     19         2021-05-26

如果 date 的优先级高于 content_id,请在 sort_values 中使用该事实:

out = df.sort_values(['user_id','date','content_id']).groupby(['user_id'])[['content_id','date']].last()

另一种可能性是将 date 转换为日期时间并使用 groupby + idxmax 查找最新日期的索引;然后使用 loc 过滤所需的输出:

df['date'] = pd.to_datetime(df['date'])
out = df.loc[df.groupby('user_id')['date'].idxmax()]

输出:

         content_id        date
user_id                        
123              20  2020-10-14
234              19  2021-05-26