2014-10-23 8 views
3

Я использую dataframe панды проиндексирована DateTimes, который выглядит примерно так:Поиск Список всех рисунков в панде Dataframe

TimeSys_Index 
2014-08-29 00:00:18 0 
2014-08-29 00:00:19 0 
2014-08-29 00:00:20 1 
2014-08-29 00:00:21 1 
2014-08-29 00:00:22 0 
2014-08-29 00:00:23 0 
2014-08-29 00:00:24 0 
2014-08-29 00:00:25 0 
2014-08-29 00:00:26 0 
2014-08-29 00:00:27 1 
2014-08-29 00:00:28 1 
2014-08-29 00:00:29 1 
2014-08-29 00:00:30 1 
2014-08-29 00:00:31 0 
2014-08-29 00:00:32 0 
2014-08-29 00:00:33 0 
... 

Я хочу найти индекс (время) для каждого вхождения шаблона [ 0, 0, 1, 1]. Используя приведенную выше последовательность, я бы хотел, чтобы она вернулась ['2014-08-29 00:00:18', '2014-08-29 00:00:25']. Кикер это нужно векторизовать или, по крайней мере, очень быстро.

Я думал о выполнении корреляции полного вектора с вектором шаблона и поиске индексов, где результирующий вектор равен 4, но это должен быть более простой способ.

ответ

3

Вы можете посмотреть на сдвинутых значений:

>>> df.head() 
        val 
TimeSys_Index   
2014-08-29 00:00:18 0 
2014-08-29 00:00:19 0 
2014-08-29 00:00:20 1 
2014-08-29 00:00:21 1 
2014-08-29 00:00:22 0 
>>> i = (df['val'] == 0) & (df['val'].shift(-1) == 0) 
>>> i &= (df['val'].shift(-2) == 1) & (df['val'].shift(-3) == 1) 
>>> df.index[i] 
<class 'pandas.tseries.index.DatetimeIndex'> 
[2014-08-29 00:00:18, 2014-08-29 00:00:25] 
Length: 2, Freq: None, Timezone: None 
+0

Я пытаюсь использовать это решение для не-даты и времени индексируется данных. Когда я запускаю это, как вы уже опубликовали, я получаю объект «RangeIndex» не вызываемым ». - Какие-либо предложения? Спасибо! – SDS

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