Не могли бы вы попробовать следующее.
df['total']=df.groupby('city').cumcount()+1
df.drop_duplicates('city',keep='last').reset_index(drop='True')
Чтобы сохранить это в кадре данных, используйте:
df['total']=df.groupby('city').cumcount()+1
df1=df.drop_duplicates('city',keep='last').reset_index(drop='True')
df1
Когда мы print df
его значение будет следующим:
city total
0 a 1
1 f 1
2 m 3
3 d 1