是否可以获取期间索引或期间范围的date-year属性?

时间:2019-10-07 20:58:03

标签: python pandas dataframe

我想获得一家公司的会计年度,该公司的季度末于该季度的最后一个星期五,该财政年度的开始日期是5月,而财政年度的结束月份是4月。当我询问Periodindex的日历年属性时,我得到了季度末年的日历年(并且我理解为什么并且可以开始季度开始)。但是,在仍设置抵消额的同时,我还能解决这个问题吗?

日期列表-测试数据

first_date = datetime(2017, 1, 1)
last_date = datetime(2019, 9, 20)
x = 30
list_of_dates = [date for date in np.arange(first_date, last_date, timedelta(days=x)).astype(datetime)]

创建数据框

df = pd.DataFrame({'dates': list_of_dates})

创建索引

idx = pd.PeriodIndex(df.dates, freq='Q-APR')

df['fscl_YrQtr'] = idx
df['calendar_Yr'] = idx.year
df['fscl_Yr'] = idx.qyear
df['fscl_Qtr'] = idx.quarter

除最后一项(df ['fscl_year_huh'])以外,其余所有工作都持续给我2018年。我想不通。

df['Q_end_date'] = [date - pd.tseries.offsets.DateOffset(days=1) + pd.tseries.offsets.FY5253Quarter(normalize=True, weekday=4,startingMonth=4, qtr_with_extra_week=1, variation='last') for date in  df.dates]
df['fscl_year_quarter'] = pd.PeriodIndex([date - pd.tseries.offsets.DateOffset(days=1) + pd.tseries.offsets.FY5253Quarter(normalize=True, weekday=4,startingMonth=4, qtr_with_extra_week=1, variation='last') for date in  df.dates], freq='Q-APR')
df['month'] = df.dates.dt.month
df['year'] = df.dates.dt.year
df['fscl_days_of_period'] = pd.PeriodIndex([date - pd.tseries.offsets.DateOffset(days=1) + pd.tseries.offsets.FY5253Quarter(normalize=True, weekday=4,startingMonth=4, qtr_with_extra_week=1, variation='last') for date in  df.dates], freq='Q-APR').day
df['fscl_quarter_num'] = pd.PeriodIndex([date - pd.tseries.offsets.DateOffset(days=1) + pd.tseries.offsets.FY5253Quarter(normalize=True, weekday=4,startingMonth=4, qtr_with_extra_week=1, variation='last') for date in  df.dates], freq='Q-APR').quarter
df['fscl_year_huh'] = pd.PeriodIndex([date - pd.tseries.offsets.DateOffset(days=1) + pd.tseries.offsets.FY5253Quarter(normalize=True, weekday=4,startingMonth=4, qtr_with_extra_week=1, variation='last') for date in  df.dates], freq='Q-APR').year

1 个答案:

答案 0 :(得分:0)

我不知道这是否是pythonic,但我利用loc解决了这个问题:

df.loc[((df.dates.dt.month >= 5) | ((df.dates.dt.month == 4) & (df['fscl_quarter_num'] == 1))), 'fiscl_year'] = df.dates.dt.year + 1
df.loc[((df.dates.dt.month <= 4) & (df['fscl_quarter_num'] != 1)), 'fiscl_year'] = df.dates.dt.year

5月或以后的任何月份都会增加一个会计年度。财政月在月底之前结束的任何4月,月底的财政季度为1。