如何用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
相关产品推荐
相关产品推荐

