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

如何用Pandas判断指定日期是否落在两日期列的区间内

解决方案

步骤1:转换日期列为datetime类型

首先需要将date_start和date_end列从字符串转换为Pandas的datetime类型,确保能正确进行日期区间比较。

步骤2:定义并转换目标日期

把dates_xmas中的字符串日期同样转为datetime对象,方便后续匹配操作。

步骤3:判断区间是否包含目标日期

通过向量化或逐行检查的方式,判断每行的日期区间是否包含至少一个圣诞目标日期,最后将布尔结果转为0/1整数列。


完整实现代码

import pandas as pd

# 创建原始DataFrame
df = pd.DataFrame({
    'date_start': ['2022-12-06', '2022-12-25', '2022-12-16'],
    'date_end': ['2022-12-08', '2022-12-26', '2022-12-30']
})

# 转换日期列为datetime类型
df['date_start'] = pd.to_datetime(df['date_start'])
df['date_end'] = pd.to_datetime(df['date_end'])

# 定义目标圣诞日期并转换为datetime格式
dates_xmas = pd.to_datetime(['2022-12-24', '2022-12-25'])

# 新增xmas列:检查区间是否包含至少一个目标日期
df['xmas'] = df.apply(
    lambda row: any((row['date_start'] <= dt) & (dt <= row['date_end']) for dt in dates_xmas),
    axis=1
).astype(int)

print(df)

代码说明

  • pd.to_datetime():完成字符串到日期类型的转换,是日期比较的前提。
  • df.apply(..., axis=1):逐行遍历数据,判断当前行的日期区间是否覆盖dates_xmas中的任意日期。
  • astype(int):将布尔值True/False转为整数1/0,匹配期望输出格式。

高效优化方案(适合大数据集)

如果数据量较大,逐行apply效率偏低,可使用向量化运算替代:

# 生成每个目标日期的区间匹配条件
conditions = [(df['date_start'] <= dt) & (dt <= df['date_end']) for dt in dates_xmas]
# 合并条件:只要有一个满足则标记为1
df['xmas'] = pd.concat(conditions, axis=1).any(axis=1).astype(int)

这种方式利用Pandas的向量化特性,运算速度远快于逐行遍历,适合处理大规模数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:57:37