Pandas - Encontre e indexe linhas que correspondam ao padrão de sequência de linhas

Gostaria de encontrar um padrão em um quadro de dados em uma variável categórica descendo as linhas. Eu posso ver como usar Series.shift () para olhar para cima / baixo e usar a lógica booleana para encontrar o padrão, no entanto, quero fazer isso com uma variável de agrupamento e também rotular todas as linhas que fazem parte do padrão, não apenas a linha inicial.

Código:

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)

O que retorna isso:

Eu posso encontrar o início do padrão (sem nenhum agrupamento) com isso:

# 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)

O que eu não consigo descobrir é como fazer isso apenas com o "group_var" e, em vez de retornar True para o início do padrão, retorne true para todas as linhas que fazem parte do padrão.

Aprecie as dicas de como resolver isso!

Obrigado...

questionAnswers(5)

yourAnswerToTheQuestion