Это долгий путь, может быть, профессионал даст вам прекрасный вкладыш
df2 = df.T.reset_index()
df2['city'] = [x[0] for x in df2['index'].str.split('_')]
df2['year'] = [x[1] for x in df2['index'].str.split('_')]
df2['pct'] = df2.sort_values('year').groupby(['city'])['ID:1012'].pct_change()
выход
Index index ID:1012 city year pct
0 Toronto_2000 100 Toronto 2000 NaN
1 Toronto_2001 98 Toronto 2001 -0.029703
2 Toronto_2002 102 Toronto 2002 -0.019231
3 Toronto_2003 105 Toronto 2003 -0.027778
4 Montreal_2000 101 Montreal 2000 0.010000
5 Montreal_2001 104 Montreal 2001 0.061224
6 Montreal_2002 108 Montreal 2002 0.058824
7 Montreal_2003 110 Montreal 2003 0.047619