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

如何按Id分组,基于时间因素对类别事件分配固定排名

解决方案

可以通过Pandas的分组、聚合和排名功能实现需求,具体步骤如下:

步骤1:准备数据并转换时间格式

首先确保时间列是可排序的datetime类型,避免因字符串格式导致排序错误:

import pandas as pd

# 示例数据(和你提供的一致)
data = {
    'Id': [1,1,1,1,1,1,1,2,2,2,2,2],
    'Event': ['event1','event2','event3','event4','event5','event4','event3','event1','event2','event3','event5','event2'],
    'Time(DD/MM/YYYY HH:MM:SS)': ['4/20/2022 1:09:47 AM','4/20/2022 1:12:23 AM','4/20/2022 1:13:35 AM','4/20/2022 1:13:36 AM','4/20/2022 1:13:37 AM','4/20/2022 1:15:17 AM','4/20/2022 5:56:35 AM','4/26/2022 11:19:00 AM','4/26/2022 11:20:05 AM','4/26/2022 11:20:46 AM','4/26/2022 11:20:50 AM','4/26/2022 11:21:50 AM']
}

df = pd.DataFrame(data)

# 转换时间列为datetime类型(匹配你标注的DD/MM/YYYY格式)
df['Time'] = pd.to_datetime(df['Time(DD/MM/YYYY HH:MM:SS)'], format='%d/%m/%Y %I:%M:%S %p')

步骤2:计算每个事件的首次出现排名

通过分组聚合获取每个Id下各事件的首次出现时间,再基于这个时间分配排名:

# 按Id和Event分组,提取每个事件的首次出现时间
event_first_occurrence = df.groupby(['Id', 'Event'])['Time'].min().reset_index()

# 按Id分组,对每个组内的事件按首次出现时间排序,分配从1开始的整数排名
event_first_occurrence['Output'] = event_first_occurrence.groupby('Id')['Time'].rank(method='first', ascending=True).astype(int)

# 将排名映射回原DataFrame
df = df.merge(event_first_occurrence[['Id', 'Event', 'Output']], on=['Id', 'Event'], how='left')

# 恢复原列顺序(可选)
df = df[['Id', 'Event', 'Time(DD/MM/YYYY HH:MM:SS)', 'Output']]

结果说明

执行后得到的df会和你提供的示例输出完全一致:

  • 每个Id内的事件按首次出现的时间顺序分配排名,从1开始递增
  • 同一Id下的重复事件会沿用首次分配的排名
  • 不同Id的排名独立计算(比如两个Id的event1都排1)

内容的提问来源于stack exchange,提问作者Data-7scientist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:10:01