Как отсортировать фрейм данных по значениям из списка - PullRequest
3 голосов
/ 02 марта 2020

У меня есть список с номерами:

[18, 22, 20]

и фреймом данных:

Id                       | node_id
UC5E9-r42JlymhLPnDv2wHuA | 20
UCFqcNI0NaAA21NS9W3ExCRg | 18
UCrb6U1FuOP5EZ7n7LfOJMMQ | 22

номера списков сопоставляются с номерами node_id. Порядок номеров node_id имеет значение, они должны быть в порядке номеров списка.

Таким образом, кадр данных находится в неправильном порядке.

Мне нужно отсортировать кадр данных по значениям списка .

Конечный результат должен быть:

Id                       | node_id
UCFqcNI0NaAA21NS9W3ExCRg | 18    
UCrb6U1FuOP5EZ7n7LfOJMMQ | 22
UC5E9-r42JlymhLPnDv2wHuA | 20

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

Ответы [ 2 ]

5 голосов
/ 02 марта 2020

Использовать отсортированный Categorical, поэтому вы можете использовать DataFrame.sort_values:

L = [18, 22, 20]
df['node_id'] = pd.Categorical(df['node_id'], ordered=True, categories=L)
df = df.sort_values('node_id')
print (df)
                         Id node_id
1  UCFqcNI0NaAA21NS9W3ExCRg      18
2  UCrb6U1FuOP5EZ7n7LfOJMMQ      22
0  UC5E9-r42JlymhLPnDv2wHuA      20

Если хотите избежать Categorical столбец:

df = df.iloc[df['node_id'].map({v: k for k, v in enumerate(L)}).argsort()]
1 голос
/ 02 марта 2020

сделаю

l=[18, 22, 20]
df=df.iloc[pd.Categorical(df.node_id, l).argsort()]
Out[79]: 
                         Id  node_id
1  UCFqcNI0NaAA21NS9W3ExCRg       18
2  UCrb6U1FuOP5EZ7n7LfOJMMQ       22
0  UC5E9-r42JlymhLPnDv2wHuA       20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...