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

如何高效从Pandas DataFrame的Datetime列减去对应小时偏移量?

高效处理Pandas DataFrame的时间偏移计算

问题背景

有一个包含30万+行的Pandas DataFrame,其中一列是Datetime类型数据,另一列是1-10的整数小时偏移量。需要新增一列,将Datetime列的值减去对应行的小时数。当前使用lambda+apply的方案运行耗时约10分钟,急需更高效的替代方案。

原示例代码:

# example df
df_data = pd.DataFrame({'Date_Time': ['1/1/2022 12:00', '1/7/2022 18:00', '1/3/2022 14:00'], 
                   'offset': [1, 2, 5]})

# subtract time    
df_data['Date_Time_New'] = df_data.apply(lambda x: x.Date_Time - pd.DateOffset(hours=x.offset), axis=1)

高效解决方案

使用Pandas的矢量时间运算替代逐行apply,底层基于C实现的向量化操作能将处理时间压缩到秒级:

步骤1:确保时间列是datetime类型

如果Date_Time是字符串格式,先转换为datetime类型(已为datetime类型可跳过):

df_data['Date_Time'] = pd.to_datetime(df_data['Date_Time'])

步骤2:用矢量运算计算偏移后时间

将offset列转换为时间差对象,直接与Date_Time列做减法:

df_data['Date_Time_New'] = df_data['Date_Time'] - pd.to_timedelta(df_data['offset'], unit='h')

性能对比

  • 原apply方案:30万+行耗时约10分钟
  • 矢量运算方案:30万+行耗时通常在1-2秒内完成

原理说明

apply是逐行遍历DataFrame,每一行都要调用Python层面的lambda函数,存在大量循环开销。而矢量运算直接对整列数据进行批量处理,利用Pandas底层的优化实现,避免了Python循环的性能损耗,是处理大规模数据的最优选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:05:17