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

Python中DataFrame时间戳取整至最近小时的实现方法

把DataFrame中的时间戳取整到最近的小时

嘿,这个需求我之前处理过好几次,给你分享两个实用的方法,完全能匹配你的要求:

方法一:用pandas原生的dt.round()(最简便)

pandas的datetime系列自带的round()方法特别适合这个场景,只要指定频率为'H'(小时),它就会自动按四舍五入规则取整——分钟数小于30就舍到当前小时,大于等于30就进到下一小时,刚好对应你给出的例子:0:16舍到0:00,1:56进到2:00。

示例代码:

import pandas as pd

# 构造示例数据(如果你的时间列已经是datetime类型,可以跳过转换步骤)
df = pd.DataFrame({
    'timestamp': ['2017-11-18 0:16', '2017-11-18 1:56']
})

# 关键步骤:把字符串格式的时间转成datetime类型
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 取整到最近的小时
df['rounded_hour'] = df['timestamp'].dt.round('H')

运行后得到的结果:

timestamprounded_hour
2017-11-18 00:16:002017-11-18 00:00:00
2017-11-18 01:56:002017-11-18 02:00:00

完全符合你的预期~

方法二:自定义取整逻辑(更灵活)

如果之后你需要调整取整规则(比如改成分钟≥20就进位),可以用floor()和ceil()结合自定义判断来实现:

df['rounded_hour'] = df['timestamp'].apply(
    lambda x: x.ceil('H') if x.minute >= 30 else x.floor('H')
)

这个方法和round()的效果在你的需求下完全一致,但好处是规则完全由你掌控,想改阈值直接修改30这个数字就行。

小提醒

一定要确保你的时间列是datetime64类型,如果是字符串格式,必须先用pd.to_datetime()转换,不然无法使用这些dt开头的方法哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:30:32