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

如何用Pandas Datetime为到期日期匹配对应月度第三个周五?

解决方案:为到期日期匹配正确的月度第三个周五

核心思路是直接计算每个日期对应的目标第三个周五,而非依赖现有数据中筛选出的记录(现有数据缺失部分月份的第三个周五,导致匹配失效)。通过Pandas的日期偏移量工具,可以精准计算任意月份的第三个周五,再根据到期日期与当月第三个周五的关系,返回正确的目标日期。

完整代码

import pandas as pd

def get_third_friday(date):
    # 获取当月第一天
    first_day = date.replace(day=1)
    # 计算当月第三个周五:WeekOfMonth的week参数为0-indexed,week=2对应第三周;weekday=4对应周五
    return first_day + pd.offsets.WeekOfMonth(week=2, weekday=4)

def get_target_third_friday(exp_date):
    current_month_third_fri = get_third_friday(exp_date)
    if exp_date <= current_month_third_fri:
        return current_month_third_fri
    else:
        # 计算下月的第三个周五
        next_month_date = exp_date + pd.DateOffset(months=1)
        return get_third_friday(next_month_date)

# 原始数据
x = ['09/23/2022','09/26/2022','09/28/2022','09/30/2022','10/3/2022','10/5/2022',
'10/7/2022','10/10/2022','10/12/2022','10/14/2022','10/17/2022','10/19/2022','10/21/2022',
'10/24/2022','10/26/2022','10/28/2022','11/4/2022','11/18/2022','12/16/2022','12/30/2022',
'01/20/2023','03/17/2023','03/31/2023','06/16/2023','06/30/2023','09/15/2023','12/15/2023',
'01/19/2024','06/21/2024','12/20/2024','01/17/2025']

# 构造DataFrame并处理日期格式
df = pd.DataFrame(x, columns=['expiration_date'])
df['expiration_date'] = pd.to_datetime(df['expiration_date'])

# 生成目标月度第三个周五列
df['monthly_exp'] = df['expiration_date'].apply(get_target_third_friday)

# 可选:保留原有的is_third_friday列用于验证
def is_third_friday(d):
    return d.weekday() == 4 and 15 <= d.day <= 21
df['is_third_friday'] = df['expiration_date'].apply(is_third_friday)

# 输出到CSV
df.to_csv('C:/Data/Date Dataframe.csv', index=False)

关键步骤说明

  1. get_third_friday函数:

    • 获取输入日期所在月份的第一天,利用pd.offsets.WeekOfMonth偏移量直接计算该月的第三个周五。其中week=2是因为参数为0-indexed(0对应第一周,2对应第三周),weekday=4对应周五(周一为0,周日为6)。
    • 此方法不依赖任何现有数据,无论目标月份的第三个周五是否在原始数据中,都能准确计算。
  2. get_target_third_friday函数:

    • 先计算当前月份的第三个周五,若到期日期早于或等于该日期,则返回当月第三个周五;
    • 若到期日期晚于当月第三个周五,则计算下月的第三个周五并返回。
  3. 应用到DataFrame:

    • 通过apply方法将get_target_third_friday函数作用于每个到期日期,生成monthly_exp列,即为每个日期匹配的正确目标周五。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:15:44