Найти шаблон с заданным началом и концом, но с неизвестной длиной - PullRequest
0 голосов
/ 30 октября 2018

Суть:

Это дополнительный вопрос к Найти конкретный шаблон в кадре данных панд , но сейчас я не ищу фиксированный шаблон. Итак, как вы можете определить конкретное начало и конец шаблона / периода времени и установить в соответствии с этим подкадр данных pandas?

Подробности:

Допустим, у вас есть этот фрейм данных:

            ColA  ColB
Dates                 
2017-07-07   103    92
2017-07-08    92    96
2017-07-09   107   109
2017-07-10   100    91
2017-07-11    90   107
2017-07-12   105    99
2017-07-13    90   104
2017-07-14    90   105
2017-07-15   109   104
2017-07-16    94    90

И скажем, что шаблон, который вы ищете, начинается с [107, 100] в ColA и заканчивается [90, 109] в том же столбце (ColB только для иллюстрации того, что это кадр данных, а не ряд). Как вы можете установить подкадр данных, не зная, сколько наблюдений лежит между ними?

Желаемый выход:

            ColA  ColB
Dates                 
2017-07-09   107   109
2017-07-10   100    91
2017-07-11    90   107
2017-07-12   105    99
2017-07-13    90   104
2017-07-14    90   105
2017-07-15   109   104

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

1 Ответ

0 голосов
/ 30 октября 2018

Для пары значений вы можете использовать pd.Series.shift. Вам потребуется дополнительная логика для учета idx2, встречающегося до idx1, и для обобщения произвольных смежных значений.

idx1 = (df['ColA'].eq(107) & df['ColA'].shift(-1).eq(100)).idxmax()
idx2 = (df['ColA'].shift().eq(90) & df['ColA'].eq(109)).idxmax()

print(df.loc[idx1: idx2])

            ColA  ColB
Dates                 
2017-07-09   107   109
2017-07-10   100    91
2017-07-11    90   107
2017-07-12   105    99
2017-07-13    90   104
2017-07-14    90   105
2017-07-15   109   104
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...