将时间序列中获得的季度更改为财务季度

Change Quarters as obtained in time series to financial quarters

所以我有一个 table 如图所示。它有一年中的日期季度和 SoldItems 列。我想将其更改为文字,并在财政年度季度中使用它,其中 Jan-Mar =Qtr4,Apr-Jun = Qtr1,Jul-Sep =Qtr2,Oct-Dec =Qtr3.

0   2019-01-01   1  23
1   2019-01-02   1  87
2   2019-01-03   1  54
3   2019-01-04   1  63
4   2019-01-05   1  14

我该怎么做?

您可以使用 PeriodIndex,其中通过使用 freq 参数,您可以设置年份的开始时间。请注意,我添加了更多行来说明它在其他月份有效。

df['Qtr'] = pd.PeriodIndex(df['Date'], freq='Q-MAR').strftime('Qtr%q')

输出:

         Date   Qtr  SoldItems
0  2019-01-01  Qtr4         23
1  2019-01-02  Qtr4         87
2  2019-01-03  Qtr4         54
3  2019-01-04  Qtr4         63
4  2019-01-05  Qtr4         14
5  2019-04-03  Qtr1         54
6  2019-09-04  Qtr2         63
7  2019-11-05  Qtr3         14

第一种方法使用np.where

d = '''0   2019-01-01   1  23
1   2019-01-02   1  87
2   2019-01-03   1  54
3   2019-01-04   1  63
4   2019-01-05   1  14'''
data=[x.split() for x in d.split('\n')]
df = pd.DataFrame(data)
df[2]=df[2].astype(int)


#solution
df['Q'] = np.where(df[2]<4, 'Qtr4',
         np.where(df[2]<7,'Qtr1',
         np.where(df[2]<10, 'Jul-Sep','Oct-Dec')))

输出:

另一种使用pd.cut的方法:

bins = [0,3,6,9,12]
pd.cut(df[2], bins = bins, labels = [f'Qtr{i}' for i in range(1,len(bins))])