Pandas 从数据框中的日期获取财政年度,并添加为新列

Pandas 从数据框中的日期获取财政年度,并添加为新列,pandas,dataframe,datetime,Pandas,Dataframe,Datetime,这必须非常简单,但找不到答案-有一个带有日期的数据框,我只需要添加一个财政年度列(4月1日至3月31日)-例如,19年5月15日将返回2019年或2019-20年 我可能可以用for循环来实现,但我猜在数据帧中有更好的方法吗 if base_date.month > 3: fin_year = base_date.year else: fin_year = base_date.year-1 假设您的日期列是base\u date,并且是一个datetime对象,则这将起作

这必须非常简单,但找不到答案-有一个带有日期的数据框,我只需要添加一个财政年度列(4月1日至3月31日)-例如,19年5月15日将返回2019年或2019-20年

我可能可以用for循环来实现,但我猜在数据帧中有更好的方法吗

if base_date.month > 3:
    fin_year = base_date.year
else:
    fin_year = base_date.year-1

假设您的日期列是
base\u date
,并且是一个datetime对象,则这将起作用:

df['financial_year'] = df['base_date'].map(lambda x: x.year if x.month > 3 else x.year-1)

实际上,这有一个功能:

s.dt.to_period('Q-OCT').dt.qyear

PeriodIndex
对象具有重铸为年度序列的
as_freq
方法,该方法允许您指定年开始的月份

df['financial_year'] = df['base_date'].asfreq('A-APR') - 1

减去1,将前一个4月视为一年的开始。

我确信这是可行的,但我不太明白如何让它起作用。我试着将其应用为:df['Fin_Yr']=df.to_period('Q-OCT')。df.qyear
df['Fin_Yr']=df['your_date_column_name'].dt.to_period('Q-OCT')。df.qyear
起到了治疗作用-谢谢:)正在使用。映射通常比迭代for循环更好/不同?是的,它更干净、更快!