Группировка по данным с расширением до новых столбцов - PullRequest
1 голос
/ 02 ноября 2019

Как я могу добиться следующего в Python или R?

Сгруппировать по фамилии и имени и переместить адрес и город в новые столбцы сгруппированной строки

  Surname  Givename  Address  City
1   Name1 Givename1  Addr11 City11
2   Name1 Givename1  Addr12 City12
3   Name2 Givename2  Addr21 City21
4   Name2 Givename2  Addr22 City22
5   Name2 Givename2  Addr23 City23

В:

  Surname  Givename  Address  City  Address City  Address  City
1   Name1 Givename1  Addr11 City11  Addr12 City12
2   Name2 Givename2  Addr21 City21  Addr22 City22  Addr23 City23

Меня не волнуют повторяющиеся имена столбцов, они могут выглядеть так или с дополнительным номером адреса

1 Ответ

1 голос
/ 02 ноября 2019

В пандах: вы можете использовать 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 как столбцы не индексировались.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...