Если ваши данные имеют последовательные годы для всех идентификаторов (без идентификатора с 2016 2018
), то вы можете сделать:
df['col'] = df.sort_values('Year').groupby('ID').Score.shift(-1)
Вывод:
Year ID Score col
0 2018 785 8.4 NaN
1 2018 770 -1.2 NaN
2 2017 733 3.2 3.9
3 2017 785 7.9 8.4
4 2018 733 3.9 NaN
Если годы негарантированно будет последовательным, затем выполните слияние:
df.merge(df.assign(Year=lambda x: x.Year - 1),
on=['Year', 'ID'],
suffixes = ['','_new'],
how='left')
Вывод:
Year ID Score Score_new
0 2018 785 8.4 NaN
1 2018 770 -1.2 NaN
2 2017 733 3.2 3.9
3 2017 785 7.9 8.4
4 2018 733 3.9 NaN