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

将Pandas DataFrame中'QQ YY'格式日期转换为财年起止日期列

财季日期转换解决方案

我们需要将格式为QQ YY(如Q1 26)的财季数据,转换为基于10月1日开始的财年对应的采购起止日期(mm/dd/yy格式)。示例输入DataFrame如下:

import pandas as pd
df = pd.DataFrame({'Projected Date':['Q1 26', 'Q2 26', 'Q3 26', 'Q4 26']})

解决思路

因为财年从10月1日开始,各财季对应的自然年和月份规则如下:

  • Q1(财年第1季度):对应自然年YY-1的10月1日至12月31日
  • Q2(财年第2季度):对应自然年YY的1月1日至3月31日
  • Q3(财年第3季度):对应自然年YY的4月1日至6月30日
  • Q4(财年第4季度):对应自然年YY的7月1日至9月30日

我们可以通过拆分财季和年份、映射对应日期范围,再格式化输出的方式实现转换。

代码实现

import pandas as pd
from datetime import datetime

def convert_fiscal_quarter(date_str):
    # 拆分财季和年份
    qtr, yy = date_str.split()
    fiscal_year = int(yy)
    qtr_num = int(qtr[1])
    
    # 计算自然年、开始和结束月份
    if qtr_num == 1:
        calendar_year = fiscal_year - 1
        start_month, end_month = 10, 12
    elif qtr_num == 2:
        calendar_year = fiscal_year
        start_month, end_month = 1, 3
    elif qtr_num == 3:
        calendar_year = fiscal_year
        start_month, end_month = 4, 6
    else: # Q4
        calendar_year = fiscal_year
        start_month, end_month = 7, 9
    
    # 生成起止日期并格式化
    start_date = datetime(calendar_year, start_month, 1).strftime('%m/%d/%y')
    # 计算季度最后一天:下个月第一天减1天
    end_date = (datetime(calendar_year, end_month + 1, 1) - pd.Timedelta(days=1)).strftime('%m/%d/%y')
    
    return pd.Series([start_date, end_date], index=['Procurement Start', 'Procurement End'])

# 应用转换函数
df[['Procurement Start', 'Procurement End']] = df['Projected Date'].apply(convert_fiscal_quarter)

print(df)

输出结果

Projected Date Procurement Start Procurement End
0          Q1 26          10/01/25        12/31/25
1          Q2 26          01/01/26        03/31/26
2          Q3 26          04/01/26        06/30/26
3          Q4 26          07/01/26        09/30/26

内容的提问来源于stack exchange,提问作者Greg H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:12:17