Pandas -计算上一个定制季度的总收入并重新调整表格

zf2sa74q  于 2022-12-21  发布在  其他
关注(0)|答案(1)|浏览(93)

我有一个 Dataframe 如下

df = pd.DataFrame(
    {'stud_id' : [101, 101, 101, 101, 
                  101, 101, 101, 101],
     'sub_code' : ['CSE01', 'CSE01', 'CSE01', 
                   'CSE01', 'CSE02', 'CSE02',
                   'CSE02', 'CSE02'],
     'ques_date' : ['10/11/2022', '06/06/2022','09/04/2022', '27/03/2022', 
                '13/05/2010',  '10/11/2021','11/1/2022', '27/02/2022'],
     'revenue' : [77, 86, 55, 90, 
                65, 90, 80, 67]}
)
df['ques_date'] = pd.to_datetime(df['ques_date'])

我想做以下几点
a)根据我们组织的FY日历计算自定义季度。即,10月至12月为Q1,1月至3月为Q2,4月至6月为Q3,7月至9月为Q4。
B)按studid分组
c)计算前两个季度(从特定日期20/12/2022开始)的收入之和。例如,如果我们在2023Q1中,我希望分别获得客户在2022Q42022Q3中的收入之和
所以,我尝试了以下方法

df['custom_qtr'] = pd.to_datetime(df['ques_date'], dayfirst=True).dt.to_period('Q-SEP')
date_1 = pd.to_datetime('20-12-2022')
df['date_based_qtr']  = date_1.to_period('Q-SEP')
pat = '(Q(\d+))'
df['custom_qtr_number'] = df['custom_qtr'].astype(str).str.extract(pat, expand=False)[1]
df['date_qtr_number'] = df['date_based_qtr'].astype(str).str.extract(pat, expand=False)[1]

但我不确定如何重塑 Dataframe 并获得如下输出。您可以看到,我们是2023Q1,我希望获得sum of revenue from previous two quarters seperately。这意味着,收入分别来自2022年第4季度和2022年第3季度

myzjeezk

myzjeezk1#

对于前2个季度,用custom_qtr减去date_based_qtr,转换为整数,并通过1,2测试成员资格,最后一次旋转:

df['ques_date'] = pd.to_datetime(df['ques_date'])
df['custom_qtr'] = pd.to_datetime(df['ques_date'], dayfirst=True).dt.to_period('Q-SEP')
date_1 = pd.to_datetime('20-12-2022')
df['date_based_qtr']  = date_1.to_period('Q-SEP')

df = df[df['date_based_qtr'].sub(df['custom_qtr']).apply(lambda x: x.n).isin([1,2])]

df = df.pivot(['stud_id','date_based_qtr'],'custom_qtr','revenue')
print (df)
custom_qtr              2022Q3  2022Q4
stud_id date_based_qtr                
101     2023Q1              86      55

相关问题