如何在pandas中定义自定义财务季度?

问题描述 投票:0回答:2

我有一个数据框如下所示

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或更好的方法来做到这一点?

我希望我的输出如下

python pandas dataframe numpy pandas-groupby
2个回答
2
投票

一个想法是为下个季度添加 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

0
投票
 df['act_qtr'] = pd.to_datetime(df['ques_date'], dayfirst=True).dt.to_period('Q-SEP') 

这是自定义财务季度的简单方法。根据您更改季度开始月份的情况,例如:第一季度从 10 月开始,在代码中您必须输入“Q-SEP”

© www.soinside.com 2019 - 2024. All rights reserved.