Как отсортировать панды данных по индивидуальному заказу по строковому индексу - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть следующий фрейм данных:

import pandas as pd

# Create DataFrame
df = pd.DataFrame(
{'id':[2967, 5335, 13950, 6141, 6169],\
 'Player': ['Cedric Hunter', 'Maurice Baker' ,\
            'Ratko Varda' ,'Ryan Bowen' ,'Adrian Caldwell'],\
 'Year': [1991 ,2004 ,2001 ,2009 ,1997],\
 'Age': [27 ,25 ,22 ,34 ,31],\
 'Tm':['CHH' ,'VAN' ,'TOT' ,'OKC' ,'DAL'],\
 'G':[6 ,7 ,60 ,52 ,81]})


df.set_index('Player', inplace=True)

Показывает:

Out[128]:

                 Age   G   Tm  Year     id
Player
Cedric Hunter     27   6  CHH  1991   2967
Maurice Baker     25   7  VAN  2004   5335
Ratko Varda       22  60  TOT  2001  13950
Ryan Bowen        34  52  OKC  2009   6141
Adrian Caldwell   31  81  DAL  1997   6169

Я хочу отсортировать индекс игрока в произвольном порядке в соответствии с этим списком (ПРИМЕЧАНИЕ: не в алфавитном порядке):

reorderlist = [ 'Maurice Baker', 'Adrian Caldwell','Ratko Varda' ,'Ryan Bowen' ,'Cedric Hunter']

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Просто reindex

df.reindex(reorderlist)
Out[89]: 
                 Age   G   Tm  Year     id
Player                                    
Maurice Baker     25   7  VAN  2004   5335
Adrian Caldwell   31  81  DAL  1997   6169
Ratko Varda       22  60  TOT  2001  13950
Ryan Bowen        34  52  OKC  2009   6141
Cedric Hunter     27   6  CHH  1991   2967
0 голосов
/ 25 апреля 2018

Чтобы получить пользовательский порядок сортировки в списке строк, объявите его как категориальный и вручную укажите этот порядок в сортировке:

player_order = pd.Categorical([ 'Maurice Baker', 'Adrian Caldwell','Ratko Varda' ,'Ryan Bowen' ,'Cedric Hunter'],
              ordered=True)

Это связано с тем, что панды пока не допускают использование категорий в качестве индексов: df.set_index(keys=player_order, inplace=True) TypeError: unhashable type: 'Categorical'

Итак, вы захотите выполнить пользовательскую сортировку вручную, используя df.sort_index(level=player_order)

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