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

如何在pandas中从日期提取财年、月份、自定义季度及相关上下文字段

完整可运行代码
import pandas as pd
from datetime import datetime

def create_date_table3(start, end):
    df = pd.DataFrame({"date": pd.date_range(start, end)})
    # 基础月份字段
    df["Month"] = df["date"].dt.month
    # 财年计算:7月到次年6月为一个财年
    df["Year"] = df.apply(lambda x: x["date"].year + 1 if x["Month"] >=7 else x["date"].year, axis=1)
    # 自定义季度映射:完全匹配7-9月Q1、10-12月Q2、1-3月Q3、4-6月Q4规则
    quarter_map = {1:3,2:3,3:3,4:4,5:4,6:4,7:1,8:1,9:1,10:2,11:2,12:2}
    df["Quarter"] = df["Month"].map(quarter_map)
    df["Year_Month"] = df["Year"].astype(str) + '_' + df["Month"].astype(str)
    
    # 计算当前参考基准值
    now = datetime.now()
    current_month = now.month
    current_natural_year = now.year
    current_fiscal_year = current_natural_year + 1 if current_month >=7 else current_natural_year
    current_quarter = quarter_map[current_month]
    # 全局季度序号,用于跨财年计算季度差
    current_q_global = current_fiscal_year * 4 + current_quarter
    
    # 年份上下文
    df["YearContext"] = df["Year"].apply(
        lambda x: "Current Year" if x == current_fiscal_year else f"{current_fiscal_year - x} Yr Ago"
    )
    
    # 月份上下文:修正原代码跨年计算错误
    def calc_month_context(row):
        month_diff = (current_natural_year - row["date"].year) * 12 + (current_month - row["Month"])
        if month_diff == 0:
            return "Current Month"
        return f"{month_diff} Mo Ago" if month_diff > 0 else f"{abs(month_diff)} Mo Later"
    
    df["MonthContext"] = df.apply(calc_month_context, axis=1)
    
    # 新增季度上下文
    def calc_quarter_context(row):
        row_q_global = row["Year"] * 4 + row["Quarter"]
        q_diff = current_q_global - row_q_global
        if q_diff == 0:
            return "Current Quarter"
        return f"{q_diff} Qtr Ago" if q_diff > 0 else f"{abs(q_diff)} Qtr Later"
    
    df["QuarterContext"] = df.apply(calc_quarter_context, axis=1)
    
    return df
核心修改说明
  • 自定义季度列:放弃容易出错的日期偏移取默认季度逻辑,直接用月份映射表匹配规则,完全符合需求的季度划分标准
  • 财年逻辑:优化为直观的条件判断,和示例规则完全匹配:2021年1月属于2021财年,2021年8月属于2022财年
  • 月份上下文:修正原代码直接减月份数值导致的跨年计算错误,通过年差换算为总月份差计算间隔,支持跨年度场景
  • 季度上下文:通过全局季度序号(财年*4+季度)计算跨财年的季度间隔,完全符合上下文标注规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:39:04