Create log with change in values in pandas dataframe

We do need melt first then groupby after drop_duplicates

s = df.melt(['id','status']).drop_duplicates(['id','variable','value'])
s['new'] = s.groupby(['id','variable'])['value'].shift()

s #s.sort_values('id')
    id    status variable  value  new
0    1       new  value_1      2  NaN
1    1  modified  value_1      1  2.0
2    1  modified  value_1      0  1.0
3    2       new  value_1      5  NaN
6    1       new  value_2      5  NaN
9    2       new  value_2      2  NaN
10   2  modified  value_2      3  2.0
11   2  modified  value_2      4  3.0