将时间序列中获得的季度更改为财务季度
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))])
所以我有一个 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))])