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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:15:34