Как одновременно сортировать столбцы в панде

Предположим, что я хочу отсортировать фрейм данных в Pandas, и мой фрейм данных выглядит следующим образом

   First Name    Last Name    Street        Address Type

0  Joe           Smith        123 Main St.  Property Address
1  Gregory       Stanton      124 Main St.  X Old Property Address
2  Phill         Allen        38 Maple St.  Alternate Address
3  Joe           Smith        PO Box 3165   Alternate Address
4  Xi            Dong         183 Main St.  Property Address
5  Phill         Allen        128 Main St.  Property Address

Я хочу сначала отсортировать фрейм данных по фамилии, чтобы он выглядел так:

   First Name    Last Name    Street        Address Type

0  Phill         Allen        38 Maple St.  Alternate Address
1  Phill         Allen        128 Main St.  Property Address
2  Xi            Dong         183 Main St.  Property Address
3  Joe           Smith        123 Main St.  Property Address
4  Joe           Smith        PO Box 3165   Alternate Address
5  Gregory       Stanton      124 Main St.  X Old Property Address

Теперь для каждого человека я хочу, чтобы адрес свойства был перед альтернативным адресом (если у человека есть и свойство, и альтернативный адрес), чтобы кадр данных выглядел так:

   First Name    Last Name    Street        Address Type

0  Phill         Allen        128 Main St   Property Address
1  Phill         Allen        38 Maple St.  Alternate Address
2  Xi            Dong         183 Main St.  Property Address
3  Joe           Smith        123 Main St.  Property Address
4  Joe           Smith        PO Box 3165   Alternate Address
5  Gregory       Stanton      124 Main St.  X Old Property Address

Обратите внимание, что записи Филла Аллена были переключены в вышеупомянутом фрейме данных, потому что его альтернативный адрес предшествовал адресу его свойства. Мой код выглядит так:

duplicates = df[df.duplicated(['Last Name'], keep=False)]
duplicates = duplicates.sort_values(['Last Name'], ascending = True)
duplicates = duplicates.sort_values(['Address Type'], ascending = True)

Я уже пытался использовать

duplicates = df.sort_values(['last', 'Address Type'], ascending = True) 

Это не работает, потому что тип адреса может быть множеством разных вещей, а не просто первичным / альтернативным, и этот код не всегда будет работать при сортировке в порядке возрастания / убывания.

Но он не переключает адрес свойства и альтернативный адрес в правильном порядке, потому что python сначала сортирует фрейм данных по Фамилии, а затем перекомпилирует его в соответствии с типом адреса. Я ищу код, который будет сортировать по фамилии и на основе этих фамилий, а затем сортировать по типу адреса. Любая помощь будет оценена. Спасибо!

1 ответ

Вы можете сортировать по нескольким столбцам. Просто поместите обе колонки в список.

duplicates = duplicates.sort_values(['Last Name', 'Address Type'], ascending = True)
Другие вопросы по тегам