如何用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
相关产品推荐
相关产品推荐

