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
我需要单独按 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