如何在 pandas 中定义自定义会计季度?
How to define custom fiscal quarters in pandas?
我有一个如下所示的数据框
df = pd.DataFrame(
{'stud_id' : [101, 101, 101, 101,
101, 101, 101, 101],
'ques_date' : ['13/11/2020', '10/1/2018','11/11/2017', '27/03/2016',
'13/05/2010', '10/11/2008','11/1/2007', '27/02/2006']})
基本上,我想做以下事情
a) 获取每个 ques_date
的财政季度
但是,我们公司遵循他们自己的季度定义,如下所示
Q1 - Oct to Dec
Q2 - Jan to Mar
Q3 - Apr to Jun
Q4 - July - Sep
我正在尝试类似下面的操作
df['act_qtr'] = df['ques_date'].dt.to_period('Q')
df['custom_qtr'] = np.where(df['act_qtr'] == 'Q1','Q2',(df['act_qtr'] == 'Q2', 'Q3',(df['act_qtr'] == 'Q3', 'Q4', (df['act_qtr'] == 'Q4', 'Q1'))))
但这不够优雅和高效。
是否有任何 pythonic 或更好的方法来做到这一点?
我希望我的输出如下所示
一个想法是为下个季度加 1,然后使用 Series.dt.strftime
作为自定义字符串 Q1, Q2, Q3, Q4
:
df['ques_date'] = pd.to_datetime(df['ques_date'], dayfirst=True)
df['act_qtr'] = df['ques_date'].dt.to_period('Q').add(1).dt.strftime('Q%q')
print (df)
stud_id ques_date act_qtr
0 101 2020-11-13 Q1
1 101 2018-01-10 Q2
2 101 2017-11-11 Q1
3 101 2016-03-27 Q2
4 101 2010-05-13 Q3
5 101 2008-11-10 Q1
6 101 2007-01-11 Q2
7 101 2006-02-27 Q2
我有一个如下所示的数据框
df = pd.DataFrame(
{'stud_id' : [101, 101, 101, 101,
101, 101, 101, 101],
'ques_date' : ['13/11/2020', '10/1/2018','11/11/2017', '27/03/2016',
'13/05/2010', '10/11/2008','11/1/2007', '27/02/2006']})
基本上,我想做以下事情
a) 获取每个 ques_date
但是,我们公司遵循他们自己的季度定义,如下所示
Q1 - Oct to Dec
Q2 - Jan to Mar
Q3 - Apr to Jun
Q4 - July - Sep
我正在尝试类似下面的操作
df['act_qtr'] = df['ques_date'].dt.to_period('Q')
df['custom_qtr'] = np.where(df['act_qtr'] == 'Q1','Q2',(df['act_qtr'] == 'Q2', 'Q3',(df['act_qtr'] == 'Q3', 'Q4', (df['act_qtr'] == 'Q4', 'Q1'))))
但这不够优雅和高效。
是否有任何 pythonic 或更好的方法来做到这一点?
我希望我的输出如下所示
一个想法是为下个季度加 1,然后使用 Series.dt.strftime
作为自定义字符串 Q1, Q2, Q3, Q4
:
df['ques_date'] = pd.to_datetime(df['ques_date'], dayfirst=True)
df['act_qtr'] = df['ques_date'].dt.to_period('Q').add(1).dt.strftime('Q%q')
print (df)
stud_id ques_date act_qtr
0 101 2020-11-13 Q1
1 101 2018-01-10 Q2
2 101 2017-11-11 Q1
3 101 2016-03-27 Q2
4 101 2010-05-13 Q3
5 101 2008-11-10 Q1
6 101 2007-01-11 Q2
7 101 2006-02-27 Q2