Самый быстрый способ фильтрации данных в зависимости от условий несколько раз - PullRequest
1 голос
/ 07 марта 2019

У меня есть фрейм данных, где мне нужно многократно фильтровать условия (более 200 000 раз), чтобы учесть уникальные результаты, которые могут быть получены.Мне интересно, есть ли более быстрый способ поиска и фильтрации для определенных условий.

Моя текущая реализация ниже

   Description Ticker     Start   Stop
0  A          B          220     100
1  Ab         TEST       180     103
2  Bac        RANDOM     205     32
3  Ba         BLAH       100     2
4  Ca         BLAH       92      40
5  Cd         B          85      25
6  A          B          221      71
7  A          B          400      171

def filter_df(object):
    stock_source = 'A'
    ticker = 'B'
    target = 120

    my_df = object.maindf[(object.maindf['Description'].values == stock_source) & (object.maindf['Ticker'].values == ticker]
    condition = (my_df['Start'].values <= target) & (my_df['Stop'].values >= target)

    my_df = my_df[condition]
    return my_df

Для приведенного выше примера я должен получить только строки с индексами 0 и 6, для которых я делаю некоторые другие вещи

 ncalls  tottime  percall  cumtime  percall filename:lineno(function)
31192    1.950    0.000   37.554    0.001 test.py:95(filter_df)

Спасибо за помощь

1 Ответ

1 голос
/ 07 марта 2019

Вы можете использовать что-то вроде:

stock_source = 'A'
ticker = 'B'
target = 120
m=df.Description.eq(stock_source) & df.Ticker.eq(ticker) \
            & ((df.Start.ge(target))&(df.Stop.le(target)))
df[m]

  Description Ticker  Start  Stop
0           A      B    220   100
6           A      B    221    71

PS: Вы можете создавать отдельные логические маски для каждого условия.:)

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