如何将日历年转换为财年?基于Pandas DataFrame的数据处理需求
解决Pandas DataFrame日历年转财年(7月至次年6月)的问题
核心逻辑
财年规则:
- 日期在7月及以后:财年为「当年年份+1」,如2021-07-05 → FY2022
- 日期在6月及以前:财年为「当年年份」,如2022-06-30 → FY2022
实现步骤
- 确保日期列是
datetime类型(原始数据是字符串时需先转换) - 提取月份判断归属,生成财年标识
- 自动处理缺失日期(
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
相关产品推荐
相关产品推荐

