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

如何用Python按自定义时长向下取整DateTime?含偏移起始点需求

Pandas 按自定义周期(含偏移)向下取整DateTime列

问题描述

我有一个包含Date和Time列的CSV文件,已在Pandas DataFrame中将其合并为格式为'%d/%m/%Y %H:%M'的DateTime列,目前使用datetime包的floor方法将时间向下取整到小时:

df['DateTime'] = df['DateTime'].dt.floor('H')

现在我希望按6小时为周期向下取整,例如将'08/09/2022 8:46'转为'08/09/2022 6:00','08/09/2022 23:59'转为'08/09/2022 18:00',也支持其他自定义时长。
同时,是否可以设置向下取整的起始偏移点?例如将起始点设为1:00时,0:59应转为前一天的19:00而非当天0:00。请问如何修改实现该功能?


解决方案

1. 按自定义周期直接向下取整

Pandas的dt.floor()方法支持传入自定义周期字符串,直接实现按指定时长向下取整:

# 按6小时周期向下取整
df['DateTime_6H_floor'] = df['DateTime'].dt.floor('6H')
  • 示例验证:
    • '08/09/2022 8:46' → '08/09/2022 6:00'
    • '08/09/2022 23:59' → '08/09/2022 18:00'

其他自定义时长同理,比如3小时传'3H'、12小时传'12H'、30分钟传'30min'即可。

2. 带起始偏移量的自定义周期取整

如果需要设置周期的起始偏移点(比如从1:00开始而非0:00),可以通过先减偏移量→取整→再加回偏移量的逻辑实现:

import pandas as pd

# 定义起始偏移量:1小时(即周期从1:00、7:00、13:00、19:00开始)
offset = pd.Timedelta(hours=1)
# 执行偏移取整
df['DateTime_6H_offset_floor'] = (df['DateTime'] - offset).dt.floor('6H') + offset
  • 示例验证:
    • '08/09/2022 00:59' → 减1小时得'07/09/2022 23:59' → floor('6H')得'07/09/2022 18:00' → 加1小时得'07/09/2022 19:00'
    • '08/09/2022 01:00' → 减1小时得'08/09/2022 00:00' → floor('6H')得'08/09/2022 00:00' → 加1小时得'08/09/2022 01:00'

你可以根据需求调整offset的时长(比如2小时就设为pd.Timedelta(hours=2)),同时替换floor()的周期参数(比如4小时传'4H'),适配不同的自定义规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:42:51