Как сохранить оригинальный индекс данных и поддерживать порядок списка ввода при использовании isin ()? - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть следующий фрейм данных: g= pd.DataFrame({'A':[1,2,42,5,7],'B':[5,6,7,3,2]})

    A  B
0   1  5
1   2  6
2  42  7
3   5  3
4   7  2

Я использую следующий список для фильтрации фрейма данных:

list_values = [5,7,1]

и получаю следующий вывод, используя:

indexes = g[g['A'].isin(list_values)].index.values

output

array([0, 3, 4], dtype=int64)

Как изменить код так, чтобы индексы были следующими?

array([3, 4, 0], dtype=int64)

По сути, я ищу способ отфильтровать DF со списком и вернуть исходные значения индекса в порядке списка фильтров.

Спасибо!

Я посмотрел на это, но не нашел то, что искал: Выберите строки из pandas кадра данных из списка, в порядке списка

1 Ответ

0 голосов
/ 15 февраля 2020

Вы можете использовать заказанный CategoricalDtype для принудительного применения пользовательского порядка сортировки. После сортировки вы возвращаете все индексы для 5, затем 7, затем 1.

import pandas as pd

my_cat = pd.CategoricalDtype(categories=list_values, ordered=True)
#CategoricalDtype(categories=[5, 7, 1], ordered=True)

g.loc[g['A'].isin(list_values), 'A'].astype(my_cat).sort_values().index
#Int64Index([3, 4, 0], dtype='int64')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...