如何判断Pandas datetime列是否在指定时间范围并生成新日期列
解决方案
核心采用Pandas向量化运算实现,全程不需要遍历DataFrame行,处理效率远高于循环操作。
前置操作
首先确保Datetime列已经转换为Pandas的datetime64格式,未转换的话先执行以下代码:
import pandas as pd import numpy as np df['Datetime'] = pd.to_datetime(df['Datetime'])
核心实现代码
直接通过条件判断配合时间属性提取完成逻辑:
df['Date'] = np.where( # 匹配00:00:00 ~ 02:00:00区间(左闭右开,完全符合规则要求) df['Datetime'].dt.hour < 2, # 满足条件则日期减1天 df['Datetime'].dt.date - pd.Timedelta(days=1), # 不满足条件直接取原日期 df['Datetime'].dt.date )
可选:输出datetime类型的Date列
如果你希望Date列为带00:00:00时间的datetime格式(方便后续做时间运算),可以调整为:
df['Date'] = np.where( df['Datetime'].dt.hour < 2, df['Datetime'].dt.floor('d') - pd.Timedelta(days=1), df['Datetime'].dt.floor('d') )
效果验证
用你提供的样例数据测试,最终输出结果如下:
| ColA | Datetime | ColB | Date |
|---|---|---|---|
| 1 | 2021-01-01 05:02:22 | SomeVal | 2021-01-01 |
| 2 | 2021-01-01 01:01:22 | SomeOtherVal | 2020-12-31 |
完全符合规则要求。
内容的提问来源于stack exchange,提问作者Cornel Verster
相关产品推荐
相关产品推荐

