2016-08-10 1 views
2

В временном ряду (упорядоченные кортежи) наиболее эффективный способ найти первый раз, когда выполняется критерий?Найти значение больше уровня - Python Pandas

В частности, каков наиболее эффективный способ определить, когда значение превышает 100 для значения столбца в кадре данных pandas?

Я надеялся на умное векторное решение и не должен был использовать df.iterrows().

Например, для данных о ценах или подсчетах, когда значение превышает 100. I.e. df ['col']> 100.

   price 
date 
2005-01-01  98 
2005-01-02  99 
2005-01-03  100 
2005-01-04  99 
2005-01-05  98 
2005-01-06  100 
2005-01-07  100 
2005-01-08  98 

но потенциально очень большой серия. Лучше ли повторять (медленно) или есть векторизованное решение?

df.iterrows() решения может быть:

for row, ind in df.iterrows(): 
    if row['col'] > value_to_check: 
     breakpoint = row['value_to_record'].loc[ind] 
     return breakpoint 
return None 

Но мой вопрос больше об эффективности (потенциально, Векторизованное решение, которое будет хорошо масштабироваться).

+0

Пример ваших данных поможет этому вопросу получить тягу. –

+0

@ juanpa.arrivillaga Я отредактировал вопрос - надеюсь, что это прояснится. – Jared

ответ

3

Попробуйте это: "> 99"

df[df['price'].gt(99)].index[0] 

"2" возвращается, второй индекс строки.

все строки индексов больше чем 99

df[df['price'].gt(99)].index 
Int64Index([2, 5, 6], dtype='int64') 
+1

Я не думаю, что это отвечает на ядро ​​вопроса, они спрашивают: есть ли векторизованная операция numpy, которая похожа на итератор, так что она будет лениво возвращать значения (мы заботимся только о первом), а не итерации по всему массиву перед возвратом – maxymoo

0

Это возвратит значение индекса первого вхождения 100 в серии:

index_value = (df['col'] - 100).apply(abs).idxmin() 

Если нет никакого значения в точности 100, она должна верните индекс ближайшего значения.

Смежные вопросы