Let's say I have a DataFrame like this:
date id val
0 2017-01-01 1 10
1 2019-01-01 1 20
2 2017-01-01 2 50
I want to group this dataset by id.
For each group, I want to add a new row to it, with the date being be 1 year from now. This row should only be added IF it is later than the last date in the group. The row's val should be the same as the last row in the group.
The final table should look like this:
date id val
0 2017-01-01 1 10
1 2019-01-01 1 20
2 2017-01-01 2 50
3 2018-09-25 2 50 <-- new row
The current code is below. I can get a mask showing which groups need a row appended, but not sure what to do next.
>>> df = pd.DataFrame(data={'d': [datetime.date(2017, 1, 1), datetime.date(2019,1,1), datetime.date(2017,1,1)], 'id': [1,1,2], 'val': [10,20,50]})
>>> df = df.sort_values(by='d')
>>> future_date = (pd.datetime.now().date() + pd.DateOffset(years=1)).date()
>>> maxd = df.groupby('id')['d'].max()
>>> maxd < future_date
id
1 False
2 True
Name: d, dtype: bool