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

如何从DataFrame的月度期间格式字段中提取月份与实际年份?

解析财年格式日期的解决方案

核心思路

从"June 2021-22"这类字符串中拆分出月份、财年起始/结束年份,再根据财年规则(示例中为4月至次年3月为一个财年)判断实际归属年份:

  • 4-12月的日期,实际年份为财年起始年份
  • 1-3月的日期,实际年份为财年结束年份

具体实现步骤

1. 准备示例数据

import pandas as pd

# 模拟用户的DataFrame
df = pd.DataFrame(
    {'period': ['June 2021-22', 'January 2021-22', 'March 2022-23', 'April 2022-23']}
)

2. 拆分日期组件

用正则提取月份、财年起始年份,财年结束年份直接通过起始年份+1得到(比字符串拼接更可靠):

# 提取月份和财年起始年份
df[['month', 'fy_start']] = df['period'].str.extract(r'(\w+) (\d{4})-\d{2}')
df['fy_start'] = df['fy_start'].astype(int)
# 计算财年结束年份(如2021-22的结束年份是2022)
df['fy_end'] = df['fy_start'] + 1

3. 映射月份并判断实际年份

先把月份名称转成数字,再根据财年规则赋值实际年份:

# 月份名称转数字的映射表
month_map = {
    'January':1, 'February':2, 'March':3,
    'April':4, 'May':5, 'June':6,
    'July':7, 'August':8, 'September':9,
    'October':10, 'November':11, 'December':12
}

df['month_num'] = df['month'].map(month_map)
# 根据财年规则计算实际年份
df['actual_year'] = df.apply(
    lambda row: row['fy_start'] if row['month_num'] >=4 else row['fy_end'],
    axis=1
)

4. 生成最终日期字符串

df['actual_date'] = df['month'] + ' ' + df['actual_year'].astype(str)

简化版实现(无需中间列)

如果不想保留拆分的中间列,可以用自定义函数一次性处理:

def parse_fy_date(period_str):
    month_part, fy_part = period_str.split()
    fy_start = int(fy_part.split('-')[0])
    fy_end = fy_start + 1
    month_num = month_map[month_part]
    actual_year = fy_start if month_num >=4 else fy_end
    return f"{month_part} {actual_year}"

df['actual_date'] = df['period'].apply(parse_fy_date)

结果示例

处理后actual_date列的输出为:

  • June 2021
  • January 2022
  • March 2023
  • April 2022

注意:如果你的财年分界不是3月,只需修改month_num >=4这个条件即可(比如财年是7月到次年6月,就改成month_num >=7)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:22:12