I have a dataframe:
df
Name Date ID Amount
0 Faye 2018-12-31 A 2
1 Faye 2019-03-31 A 1
2 Faye 2019-06-30 A 5
3 Faye 2019-09-30 B 2
4 Faye 2019-09-30 C 2
5 Faye 2019-12-31 A 4
6 Faye 2020-03-01 A 1
7 Faye 2020-03-01 B 1
8 Mike 2018-12-31 A 4
9 Mike 2019-03-31 A 4
10 Mike 2019-06-30 B 3
And for each Name, Date, ID, group I calculate the % change of Amount from the previous Date in a new column. If there was no previous entry, then I add New:
df['% Change'] = (df.sort_values('Date').groupby(['Name', 'ID']).Amount.pct_change())
df['% Change'] = df['% Change'].fillna('New')
But I also want to have an entry for the opposite case, where a Name, Date, ID, group did exist previously, but doesn't in the next date; so that the output looks like:
Name Date ID Amount % Change
0 Faye 2018-12-31 A 2 New
1 Faye 2019-03-31 A 1 -0.5
2 Faye 2019-06-30 A 5 4
3 Faye 2019-09-30 A 0 Sold
4 Faye 2019-09-30 B 2 New
5 Faye 2019-09-30 C 2 New
6 Faye 2019-12-31 A 4 New
7 Faye 2020-03-01 A 1 -0.75
8 Faye 2020-03-01 B 1 -0.5
9 Mike 2018-12-31 A 4 New
10 Mike 2019-03-31 A 4 0
11 Mike 2019-06-30 A 0 Sold
12 Mike 2019-06-30 B 3 New
In case it helps, I am trying to emulate how this site handles such cases.
