Pandas: эффективный способ выбора строк в кадре данных с использованием нескольких критериев - PullRequest
0 голосов
/ 27 августа 2018

Я выбираю / фильтрую DataFrame, используя несколько критериев (сравнение с переменными), например:

results = df1[
    (df1.Year == Year) &
    (df1.headline == text) &
    (df1.price > price1) &
    (df1.price < price2) &
    (df1.promo > promo1) &
    (df1.promo < promo2)
]

Хотя этот подход работает, он очень медленный. Поэтому мне интересно, есть ли более эффективный способ фильтрации / выбора строк по нескольким критериям с использованием панд?

1 Ответ

0 голосов
/ 27 августа 2018

По моему личному мнению, ваш нынешний подход довольно честен, насколько честен синтаксис Панд.

Одним из способов оптимизации, если вам действительно необходимо это сделать, является использование базовых массивов NumPy для генерации логических масок. Вообще говоря, у Pandas могут быть дополнительные издержки, связанные с перегрузкой операторов по сравнению с NumPy. (С компромиссом возможно большая гибкость и по сути плавная обработка данных NaN.)

price = df1.price.values
promo = df1.promo.values

# Note: this is a view to a slice of df1
results = df1.loc[
    (df1.Year.values == Year) &
    (df1.headline.values == text) &
    (price > price1) &
    (price < price2) &
    (promo > promo1) &
    (promo < promo2)
]

Во-вторых, убедитесь, что вы уже пользуетесь numexpr, что разрешено делать Пандам:

>>> import pandas as pd
>>> pd.get_option('compute.use_numexpr')  # use `pd.set_option()` if False
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...