Pandas:如何用数组公式获取接近每月5日的目标日期?
问题:识别每月5日或最接近的更早有效日期的行
现有用于筛选每月5日数据的代码:
import pandas as pd infile = "dates.csv" df = pd.read_csv(infile) dtimes = pd.to_datetime(df.iloc[:,0]) mask = (dtimes.dt.day == 5)
需求调整:若某月的5日因周末/节假日未出现在数据中,需将最接近5日的更早日期标记为True,希望用数组式操作替代循环实现。
解决方案(无循环实现)
可以借助Pandas的分组与transform方法完成向量式操作,无需循环:
import pandas as pd # 读取并解析日期列 infile = "dates.csv" df = pd.read_csv(infile) df['dtimes'] = pd.to_datetime(df.iloc[:, 0]) # 按年、月分组,计算每组内符合条件的目标日期(<=5日的最大日期) df['target_date'] = df.groupby([df['dtimes'].dt.year, df['dtimes'].dt.month])['dtimes'].transform( lambda group: group[group.dt.day <= 5].max() ) # 生成最终mask mask = df['dtimes'] == df['target_date']
逻辑说明
- 按
年+月分组,确保仅在同一月份范围内筛选目标日期 transform方法将每组的计算结果映射回原DataFrame的每一行,实现批量处理- 对每组数据,先筛选出日数≤5的日期,再取最大值,即为最接近5日的更早有效日期
- 若某月份所有日期均晚于5日,
max()会返回NaN,对应mask值为False,符合逻辑
内容的提问来源于stack exchange,提问作者Fortranner
相关产品推荐
相关产品推荐

