В пандах: вы можете использовать groupby.cumcount()
до assign
вспомогательный ряд, за которым следует unstack()
с форматированием столбца:
final=(df.assign(k=df.groupby(['Surname','Givename']).cumcount())
.set_index(['Surname','Givename','k']).unstack().sort_index(level=1,axis=1))
final.columns=[f'{a}_{b}' for a,b in final.columns.values]
print(final)
Address_0 City_0 Address_1 City_1 Address_2 City_2
Surname Givename
Name1 Givename1 Addr11 City11 Addr12 City12 NaN NaN
Name2 Givename2 Addr21 City21 Addr22 City22 Addr23 City23
Примечание: вы можете сделать final=final.reset_index()
, если хотите, чтобы Surname
и Givename
как столбцы не индексировались.