将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.
相关产品推荐
相关产品推荐

