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

如何用Python将Pandas DataFrame的时分格式转为整点结束格式?

更Pythonic的实现方案

当然有更简洁优雅的实现方式!我们可以直接利用Pandas内置的时间序列处理能力,避免手动计算小时增量,代码可读性和效率都会更高。

需求回顾

从你的示例来看,DateTime2的生成规则是:

  • 如果DateTime本身是整点(分钟数为0),则保持原时间;
  • 如果DateTime是非整点(分钟数≥15),则向上取整到下一个整点。

一行代码实现

首先确保DateTime列是datetime类型(如果还未转换的话),然后直接使用dt.ceil()方法:

# 确保DateTime列为datetime格式
df['DateTime'] = pd.to_datetime(df['DateTime'])

# 生成DateTime2列,向上取整到最近的整点
df['DateTime2'] = df['DateTime'].dt.ceil('H')

为什么这更Pythonic?

  • 语义清晰:dt.ceil('H')直接表达了“向上取整到小时”的业务意图,任何人看代码都能立刻理解逻辑;
  • 无冗余代码:不需要生成中间临时列(比如你的hrAdder),减少内存占用,代码更简洁;
  • 内置优化:Pandas的时间序列方法是经过底层优化的,比手动判断+增量计算的效率更高。

特殊场景适配(如果需要)

如果你的规则是仅当分钟数≥15时才向上取整,分钟数<15则保留当前小时(比如0:05要保留为0:00),可以用np.where结合dt.floor和dt.ceil实现:

df['DateTime2'] = np.where(
    df['DateTime'].dt.minute >= 15,
    df['DateTime'].dt.ceil('H'),
    df['DateTime'].dt.floor('H')
)

验证结果

用你的示例数据测试,上述代码生成的DateTime2完全匹配你想要的输出:

  • 1/1/2018 0:00 → 1/1/2018 0:00
  • 1/1/2018 0:15 → 1/1/2018 1:00
  • 1/1/2018 1:45 → 1/1/2018 2:00
  • 1/1/2018 2:00 → 1/1/2018 2:00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:01:50