Теперь вернем его к исходному фрейму данных:
ел бы найти шаблон в кадре данных в категориальной переменной, идущей вниз по строкам. Я могу видеть, как использовать Series.shift () для просмотра вверх / вниз и использовать логическую логику для поиска шаблона, однако я хочу сделать это с помощью переменной группировки, а также пометить все строки, которые являются частью шаблона, а не только начальный ряд.
Код:
import pandas as pd
from numpy.random import choice, randn
import string
# df constructor
n_rows = 1000
df = pd.DataFrame({'date_time': pd.date_range('2/9/2018', periods=n_rows, freq='H'),
'group_var': choice(list(string.ascii_uppercase), n_rows),
'row_pat': choice([0, 1, 2, 3], n_rows),
'values': randn(n_rows)})
# sorting
df.sort_values(by=['group_var', 'date_time'], inplace=True)
df.head(10)
Я могу найти начало шаблона (без группировки) по этому:
# the row ordinal pattern to detect
p0, p1, p2, p3 = 1, 2, 2, 0
# flag the row at the start of the pattern
df['pat_flag'] = \
df['row_pat'].eq(p0) & \
df['row_pat'].shift(-1).eq(p1) & \
df['row_pat'].shift(-2).eq(p2) & \
df['row_pat'].shift(-3).eq(p3)
df.head(10)
Что я не могу понять, так это как сделать это только с помощью «group_var», и вместо того, чтобы возвращать True для начала шаблона, возвращать true для всех строк, которые являются частью шаблона.
Ценю любые советы о том, как решить эту проблему!
Спасибо...