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

如何用Pandas筛选DataFrame中每月最后一个工作日的数据

筛选Pandas DataFrame中每月最后一个工作日的记录

核心思路

用Pandas内置的BMonthEnd日期偏移量,直接计算每条记录所属月份的最后一个工作日,再筛选出日期与该值完全匹配的行即可。

具体操作步骤

  • 确保日期列格式正确
    如果你的date列还不是datetime64类型,先做转换:

    df['date'] = pd.to_datetime(df['date'])
    
  • 添加当月最后工作日列
    利用BMonthEnd(0)把每个日期调整到其所在月份的最后一个工作日,生成新列:

    from pandas.tseries.offsets import BMonthEnd
    
    df['month_last_bday'] = df['date'] + BMonthEnd(0)
    
  • 筛选目标记录
    只保留date和month_last_bday相等的行,最后可以删掉辅助列:

    filtered_df = df[df['date'] == df['month_last_bday']].drop(columns='month_last_bday')
    

示例验证

拿你提到的2022年7、8月数据测试:

import pandas as pd
from pandas.tseries.offsets import BMonthEnd

# 构造测试数据
sample_data = {
    'date': ['2022-07-25', '2022-07-29', '2022-08-28', '2022-08-31', '2022-09-02'],
    'data_col': [1, 2, 3, 4, 5]
}
df = pd.DataFrame(sample_data)
df['date'] = pd.to_datetime(df['date'])

# 执行筛选
df['month_last_bday'] = df['date'] + BMonthEnd(0)
filtered_df = df[df['date'] == df['month_last_bday']].drop(columns='month_last_bday')
print(filtered_df)

输出结果:

date  data_col
1 2022-07-29         2
3 2022-08-31         4

完全符合预期。

额外说明

  • 如果某月份的最后工作日在你的数据里没有对应记录,该月份不会出现在结果中
  • 默认BMonthEnd遵循美国节假日规则,要是需要适配国内或其他地区的工作日,可结合pandas.tseries.holiday自定义节假日日历

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:10:24