我有一个 Dataframe 如下
df = pd.DataFrame(
{'stud_id' : [101, 101, 101, 101,
101, 102, 102, 102],
'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开始)的收入总和。例如,如果我们在2023财年,我希望分别获得客户在2022财年和2021财年的收入总和
所以,我尝试了以下基于此职位here
df['custom_qtr'] = pd.to_datetime(df['ques_date'], dayfirst=True).dt.to_period('Q-SEP')
date_1 = pd.to_datetime('20-12-2022') # CUT-OFF DATE
df['custom_year'] = df['custom_qtr'].astype(str).str.extract('(?P<year>\d+)')
df['date_based_qtr'] = date_1.to_period('Q-SEP')
df['custom_date_year'] = df['date_based_qtr'].astype(str).str.extract('(?P<year>\d+)')
df['custom_year'] = df['custom_year'].astype(int)
df['custom_date_year'] = df['custom_date_year'].astype(int)
df['diff'] = df['custom_date_year'].sub(df['custom_year'])
df = df[df['diff'].isin([1,2])]
out_df = df.pivot_table("revenue", index=['stud_id'],columns=['custom_year'],aggfunc=['sum']).add_prefix('rev_').reset_index().droplevel(0,axis=1)
但这会导致输出列不一致,如下所示
我希望我的输出如下所示
- 更新的产出**
1条答案
按热度按时间5lwkijsr1#
看起来您只需要首先对季度和年度进行细化,筛选以仅包括2021和2022行,然后进行汇总和透视:
对于更新: