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

如何高效为DataFrame每日时间戳按运行顺序分配1-3的Category编号

实现方案

前置准备

首先确保DataFrame中的Timestamp列已转换为pandas datetime类型,否则无法正确按时间排序、分组:

import pandas as pd
df['Timestamp'] = pd.to_datetime(df['Timestamp'])

最高效实现方案(推荐)

使用groupby + cumcount的向量化操作,是所有方案中性能最优的选择,50万行数据处理耗时通常不超过10ms:

  1. 先按Timestamp列升序排序(如果你的原始数据已经保证全局时间递增,可跳过这一步进一步节省时间)
df = df.sort_values('Timestamp', ignore_index=True)
  1. 按天分组后按顺序计数,计数结果加1即为1/2/3的分类编号:
# 用dt.floor('d')按天截断时间,分组效率高于dt.date
df['Category'] = df.groupby(df['Timestamp'].dt.floor('d')).cumcount() + 1

特殊场景兼容方案

如果同一天内存在完全相同的时间戳,且需要相同时间戳的记录分配相同的分类编号,可使用rank方法实现SQL中dense_rank的效果:

df['Category'] = df.groupby(df['Timestamp'].dt.floor('d'))['Timestamp'].rank(method='dense').astype(int)

性能说明

  • 两种方案均为pandas原生向量化实现,避免了Python层的循环遍历,远快于自定义apply、逐行遍历等实现方式
  • 50万行规模下无需使用分布式计算工具,单机pandas即可毫秒级完成计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:06:05