You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按日期倒序对DataFrame进行分组排名?

按用户分组对日期倒序排名的实现方法

需求:对DataFrame按user分组,同一分组内按start_time倒序排名,最新的日期对应排名1,次新对应排名2,以此类推。

示例输入数据

userstart_time
ID2022-05-31 18:13:43
BB2020-11-07 00:42:36
RL2021-11-25 01:01:15
ID2020-05-30 03:30:19
KF2021-05-18 00:26:32
MT2021-07-02 22:44:01
BB2021-08-01 16:06:37
RL2021-02-02 20:54:08
BB2022-06-25 22:52:56
KF2021-04-24 01:45:18

期望输出结果

userstart_timerank
ID2022-05-31 18:13:431
BB2020-11-07 00:42:363
RL2021-11-25 01:01:151
ID2020-05-30 03:30:192
KF2021-05-18 00:26:321
MT2021-07-02 22:44:011
BB2021-08-01 16:06:372
RL2021-02-02 20:54:082
BB2022-06-25 22:52:561
KF2021-04-24 01:45:182

实现代码

import pandas as pd

# 构造输入数据(实际场景可替换为读取数据的代码)
data = {
    'user': ['ID', 'BB', 'RL', 'ID', 'KF', 'MT', 'BB', 'RL', 'BB', 'KF'],
    'start_time': ['2022-05-31 18:13:43', '2020-11-07 00:42:36', '2021-11-25 01:01:15',
                   '2020-05-30 03:30:19', '2021-05-18 00:26:32', '2021-07-02 22:44:01',
                   '2021-08-01 16:06:37', '2021-02-02 20:54:08', '2022-06-25 22:52:56',
                   '2021-04-24 01:45:18']
}

df = pd.DataFrame(data)

# 将日期列转换为datetime类型,确保日期比较的正确性
df['start_time'] = pd.to_datetime(df['start_time'])

# 按用户分组,对日期降序排序后计算排名
df['rank'] = df.sort_values(['user', 'start_time'], ascending=[True, False]) \
               .groupby('user') \
               .cumcount() + 1

# 恢复原数据的行顺序
df = df.sort_index()

print(df)

代码说明

  1. 日期类型转换:将start_time转为datetime类型,避免字符串比较导致的逻辑错误。
  2. 排序分组:先按user升序、start_time降序排序,保证每个用户下最新的日期排在分组内首位。
  3. 计算排名:使用groupby('user').cumcount()获取分组内的序号(从0开始),加1后得到从1开始的排名。
  4. 恢复原顺序:通过sort_index()还原输入数据的行顺序,确保输出和输入的行位置一一对应。

内容的提问来源于stack exchange,提问作者figNewton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:18:20