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

如何按另一列指定值的条件过滤Pandas DataFrame的日期列数据

Pandas DataFrame 多日期列条件过滤实现方案

核心逻辑

你需要过滤的是同时满足proc_date为昨日前一天、且result_date小于昨日UTC 10:30的行,等价于保留所有不满足上述组合条件的行,直接对需要排除的条件取反即可。

完整实现代码

首先需要先计算基准时间,再做条件匹配,注意先统一日期列的类型避免比较出错:

import pandas as pd

# 1. 计算UTC基准时间
utc_now = pd.Timestamp.utcnow()
# 昨日UTC时间
yday = utc_now - pd.Timedelta(days=1)
# 昨日的前一天(取日期部分,和proc_date格式对齐)
day_before_yday = (yday - pd.Timedelta(days=1)).date()
# 昨日UTC 10:30时间截断点
yday_1030_cutoff = yday.replace(hour=10, minute=30, second=0, microsecond=0)

# 2. 统一列类型(如果你的列已经是对应类型可以跳过这步)
# proc_date转成日期类型
df['proc_date'] = pd.to_datetime(df['proc_date']).dt.date
# result_date转成UTC时区的datetime类型
df['result_date'] = pd.to_datetime(df['result_date'], utc=True)

# 3. 执行过滤
# 构造要排除的条件,加~取反就是要保留的行
filter_mask = ~((df['proc_date'] == day_before_yday) & (df['result_date'] < yday_1030_cutoff))
df = df[filter_mask]

示例验证

以你给出的示例数据为例,假设当前UTC时间为2021-09-07,那么昨日为2021-09-06,昨日的前一天为2021-09-05,过滤后剩余行如下:

index | proc_date |  result_date
  2     2021-09-05   2021-09-06 10:31:00
  3     2021-09-06   2021-09-06 10:00:00
  4     2021-09-06   2021-09-06 12:00:00

完全符合预期要求。

注意事项

  • 如果你的result_date已经是带UTC时区的datetime类型,不需要重复加utc=True参数
  • 如果你的proc_date本身存储的就是date类型,不需要执行dt.date转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:54:04