如何从pandas DataFrame的Hour列中提取按半小时进位的小时值
解决方法
首先确保你的Hour列已经转换为pandas可识别的时间格式,如果当前是字符串格式,先执行转换:
import pandas as pd df['Hour'] = pd.to_datetime(df['Hour'])
以下两种方案都可以实现半小时进位的需求:
方案1:内置ceil方法(最简洁)
直接对时间列向上取整到小时维度,再提取小时值即可,自动处理跨天进位逻辑:
df['rounded_hour'] = df['Hour'].dt.ceil('H').dt.hour
方案2:自定义条件判断(灵活性更高)
手动提取分钟值做判断,符合条件则小时数+1,模24处理23点跨天场景:
# 提取原始小时、分钟值 raw_hour = df['Hour'].dt.hour raw_minute = df['Hour'].dt.minute # 计算进位后小时 df['rounded_hour'] = (raw_hour + (raw_minute >= 30).astype(int)) % 24
结果验证
针对你给出的示例数据,两种方案输出完全一致:
| 原始时间 | rounded_hour |
|---|---|
| 09:01:00 | 9 |
| 09:20:00 | 9 |
| 09:35:00 | 10 |
| 09:48:00 | 10 |
注意事项
- 如果需要保留23:30~23:59进位后的值为24,去掉
%24即可 - 时间精度到秒的场景下,
09:29:59不会进位、09:30:00会正常进位,符合常规统计规则
内容的提问来源于stack exchange,提问作者Pranav
相关产品推荐
相关产品推荐

