如何计算Pandas时间序列与当日固定时间的小时差值?
Pandas计算日期时间与当日特定时间的小时差值最快实现方法
问题场景
假设有一个包含日期时间的Pandas Series,示例代码如下:
import pandas as pd data = [ "2023-08-14 21:56", "2023-08-15 23:04", "2023-08-16 15:43", "2023-08-17 12:05", "2023-08-18 22:19", ] s = pd.Series(data, dtype="datetime64[ns]")
需要计算每个日期时间与当日21:00的小时差值,期望得到如下结果:
0 0.93 1 2.07 2 -5.28 3 -8.92 4 1.32 dtype: float64
最快实现方法
使用Pandas的矢量化操作是最优方案,完全利用内置优化逻辑,避免循环带来的性能损耗,具体代码如下:
# 构造每个日期对应的当日21:00时间序列 target_time = s.dt.normalize() + pd.Timedelta(hours=21) # 计算时间差并转换为小时数,保留两位小数 hour_diff = (s - target_time).dt.total_seconds() / 3600 hour_diff = hour_diff.round(2)
代码说明
s.dt.normalize():将原时间序列的时间部分归零,得到每个日期的00:00:00时刻- 加上
pd.Timedelta(hours=21):得到每个日期对应的21:00:00目标时间 (s - target_time).dt.total_seconds():计算两个时间的差值并转换为总秒数,除以3600得到小时数round(2):将结果保留两位小数,与期望输出格式一致
这种方法在数据量较大时的性能优势尤为明显,远快于apply或手动循环的实现方式。
内容的提问来源于stack exchange,提问作者Xukrao
相关产品推荐
相关产品推荐

