#python #pandas #dataframe #indexing
#python #pandas #фрейм данных #индексирование
Вопрос:
У меня есть фрейм данных, где мне нужно фильтровать по условиям несколько раз (более 200 тысяч раз), чтобы учесть уникальные результаты, которые могут получиться. Мне любопытно, есть ли более быстрый способ поиска и фильтрации по конкретным условиям.
Моя текущая реализация приведена ниже
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) amp; (object.maindf['Ticker'].values == ticker]
condition = (my_df['Start'].values <= target) amp; (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:
Вы можете использовать что-то вроде:
stock_source = 'A'
ticker = 'B'
target = 120
m=df.Description.eq(stock_source) amp; df.Ticker.eq(ticker)
amp; ((df.Start.ge(target))amp;(df.Stop.le(target)))
df[m]
Description Ticker Start Stop
0 A B 220 100
6 A B 221 71
P.S: Вы можете создавать отдельные логические маски для каждого условия. 🙂
Комментарии:
1. Я пробовал это, кажется, это замедлило работу. 31192 0.973 0.000 91.404 0.003 test.py: 95(filter_df). Одно замечание, мне нужно сначала запустить первый набор условий и фильтра, а затем запустить второй набор. Это связано с некоторыми другими записями в фрейме данных