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

如何在Pandas中按规则调整DataFrame的DateTime列时间

Pandas Datetime列时间批量规整方案

需求说明

需要对Pandas DataFrame中的datetime类型列按以下规则调整时间:

  • 分钟处于16↔45区间:将分钟改为30,小时保持不变
  • 分钟处于46↔59或0↔15区间:将分钟改为00,其中46-59的情况需要将小时加1(处理跨小时场景)

输入示例:

datetime
2022/11/15 00:29
2022/11/15 00:29
2022/11/15 00:29
2022/11/15 00:59
2022/11/15 00:59
2022/11/15 00:59
2022/11/15 01:35
2022/11/15 01:35
2022/11/15 01:35
2022/11/15 02:01
2022/11/15 02:01
2022/11/15 02:01
2022/11/15 02:45
2022/11/15 02:45
2022/11/15 02:45
2022/11/15 02:48
2022/11/15 02:48
2022/11/15 02:48

目标输出:

datetime
2022/11/15 00:30
2022/11/15 00:30
2022/11/15 00:30
2022/11/15 01:00
2022/11/15 01:00
2022/11/15 01:00
2022/11/15 01:30
2022/11/15 01:30
2022/11/15 01:30
2022/11/15 02:00
2022/11/15 02:00
2022/11/15 02:00
2022/11/15 02:30
2022/11/15 02:30
2022/11/15 02:30
2022/11/15 03:00
2022/11/15 03:00
2022/11/15 03:00

实现代码

利用Pandas矢量化操作高效处理,无需逐行循环:

import pandas as pd

# 构造输入数据
data = {
    'datetime': [
        '2022/11/15 00:29', '2022/11/15 00:29', '2022/11/15 00:29',
        '2022/11/15 00:59', '2022/11/15 00:59', '2022/11/15 00:59',
        '2022/11/15 01:35', '2022/11/15 01:35', '2022/11/15 01:35',
        '2022/11/15 02:01', '2022/11/15 02:01', '2022/11/15 02:01',
        '2022/11/15 02:45', '2022/11/15 02:45', '2022/11/15 02:45',
        '2022/11/15 02:48', '2022/11/15 02:48', '2022/11/15 02:48'
    ]
}
df = pd.DataFrame(data)
# 转换为datetime类型
df['datetime'] = pd.to_datetime(df['datetime'])

# 提取分钟数
minutes = df['datetime'].dt.minute

# 划分条件区间
mask_30 = (minutes >= 16) & (minutes <= 45)
mask_00 = ~mask_30

# 处理30分钟场景
df.loc[mask_30, 'datetime'] = df.loc[mask_30, 'datetime'].dt.floor('H') + pd.Timedelta(minutes=30)
# 处理00分钟场景:0-15保留当前小时,46-59加1小时
df.loc[mask_00, 'datetime'] = df.loc[mask_00, 'datetime'].dt.floor('H')
df.loc[(minutes >= 46), 'datetime'] += pd.Timedelta(hours=1)

# 按指定格式输出结果
print(df['datetime'].dt.strftime('%Y/%m/%d %H:%M'))

代码说明

  1. 类型转换:先将字符串列转为datetime类型,方便后续时间操作
  2. 条件划分:通过提取分钟数区分两个调整区间
  3. 时间调整:
    • 16-45分钟:先向下取整到小时,再加30分钟得到目标时间
    • 0-15分钟:直接向下取整到小时,分钟自动设为00
    • 46-59分钟:向下取整到小时后加1小时,实现跨小时的00分钟调整
  4. 性能优势:全程采用Pandas矢量化操作,处理数千行数据效率极高,避免循环带来的性能损耗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:55:51