Эффективный поиск по нескольким столбцам - PullRequest
3 голосов
/ 08 апреля 2020

У меня DataFrame вот так:

df = pd.DataFrame([
    {
        'name': 'Alexandra',
        'surname': 'Johnson',
        'age': 5
    },
    {
        'name': 'Roland',
        'surname': 'Hawking',
        'age': 3
    }
])

Чтобы найти строки, соответствующие определенному условию, я использую комбинацию условий:

df[((df['name']=='Roland') | (df['surname']=='Johnson')) & (df['age'] > 4)]

, возвращая

        name  surname  age
0  Alexandra  Johnson    5

Однако, это не хорошо масштабируется для нескольких сотен тысяч строк. Чтобы ускорить поиск по столбцу, я использовал для индексации этого столбца:

indexed = df.set_index('name')
indexed[indexed.index == 'Roland']

Для нескольких столбцов я могу использовать MultiIndex, однако я не знаю, как я могу использовать комбинацию логических условий с несколькими индексами , Вы можете посоветовать?

1 Ответ

1 голос
/ 08 апреля 2020

не уверен, что это то, на что вы ссылаетесь, поэтому я попробую:

установить имя и фамилию в качестве индекса

df = df.set_index(['name','surname'])

фильтр для Александры и Джонсона - передать его в виде кортежа

df.loc[('Alexandra', 'Johnson')]

    age    5
Name: (Alexandra, Johnson), dtype: int64

U получит гораздо более высокие скорости, если вы используете ilo c, но для этого вам нужно знать указанные c индексы. но да, с multiindex, вы передаете кортеж индексов, если это три столбца, то у вас будет три элемента в вашем кортеже

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