Home > Back-end >  Calculating YTD change for weekly data
Calculating YTD change for weekly data

Time:11-18

I have a table with weekly data like below:

Date A B C D
1/1/2022 4 5 5 2
1/7/2022 3 5 9 4
1/14/2022 4 8 5 6
1/21/2022 4 6 1 4

I want to create an YTD change table like the below where YTD change is calculated as ('last value of the year' - 'first value of the year') / 'first value of the year' (i.e., basic % change). I have just started out so am not sure how to approach this in the most efficient manner.

Desired output format:

Date A B C D
2022 x x x x
2021 x x x x
2020 x x x x
2019 x x x x

CodePudding user response:

You could achieve this by using groupby with apply (the pct_change method is closely related by can only be applied on consecutive rows in a group).

df['Date'] = pd.to_datetime(df['Date'])
df = df.sort_values('Date').set_index('Date')
df.groupby(df.index.year).apply(lambda x: x.iloc[-1].subtract(x.iloc[0]).div(x.iloc[0]))

Result on the sample data:

         A    B     C   D
Date                
2022   0.0  0.2  -0.8  1.0
  • Related