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

如何将日历年转换为财年?基于Pandas DataFrame的数据处理需求

解决Pandas DataFrame日历年转财年(7月至次年6月)的问题

核心逻辑

财年规则:

  • 日期在7月及以后:财年为「当年年份+1」,如2021-07-05 → FY2022
  • 日期在6月及以前:财年为「当年年份」,如2022-06-30 → FY2022

实现步骤

  1. 确保日期列是datetime类型(原始数据是字符串时需先转换)
  2. 提取月份判断归属,生成财年标识
  3. 自动处理缺失日期(NaT会对应缺失的财年值)

代码示例

1. 构造测试数据(含多ID、缺失日期)

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'ID': [1,1,1,2,2,2],
    'Calendar_Date': ['2021-06-15', '2021-07-20', np.nan, '2022-03-10', '2022-08-05', '2023-06-30']
})

# 转换为datetime类型(如果原始数据是字符串格式)
df['Calendar_Date'] = pd.to_datetime(df['Calendar_Date'])

2. 财年转换逻辑

# 判断月份,生成财年年份
fy_year = np.where(df['Calendar_Date'].dt.month >=7, 
                   df['Calendar_Date'].dt.year +1, 
                   df['Calendar_Date'].dt.year)

# 格式化为FYxxxx样式
df['Fiscal_Year'] = 'FY' + fy_year.astype(str)

3. 输出结果

ID Calendar_Date Fiscal_Year
0   1    2021-06-15       FY2021
1   1    2021-07-20       FY2022
2   1           NaT         NaN
3   2    2022-03-10       FY2022
4   2    2022-08-05       FY2023
5   2    2023-06-30       FY2023

为什么你之前的代码无效?

asfreq('J-July')是用来调整时间序列的频率(比如把数据对齐到每年7月的最后一个工作日),本质是调整时间戳的位置,不是用来判断财年归属的,所以不适用这个场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:45:52