Calculating YTD change for weekly data


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
Asked By: Saanchi



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
2022   0.0  0.2  -0.8  1.0
Answered By: Shaido
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.