Вывести последовательные строки по условию Pandas

Как из предоставленного DF вывести пользователей, которые совершали события в очередности: "Проснулся" => "Почистил зубы" => "Пошел на работу"?

Примерно понимаю что нужно использовать shift, но не совсем понимаю как с ним работать

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Алексей Р

Группируем по пользователю, склеиваем статусы внутри групп, сравниваем их с целевой строкой 'ПроснулсяПочистил зубыПошел на работу', удаляем несовпадения. Индекс, в котором нужные имена, выводим как список.

df = pd.DataFrame({'Индекс': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                   'Время': ['00:00', '00:00', '00:01', '00:02', '00:03', '00:03', '00:04', '00:05', '00:06', '00:06'],
                   'Пользователь': ['Петр', 'Иван', 'Петр', 'Петр', 'Семен', 'Иван', 'Федор', 'Иван', 'Алексей',
                                    'Игнат'],
                   'Событие': ['Проснулся', 'Проснулся', 'Почистил зубы', 'Пошел на работу', 'Умылся', 'Почистил зубы',
                               'Умылся', 'Пошел на работу', 'Пошел на работу', 'Заснул']})
s = df.groupby('Пользователь')['Событие'].sum().eq('ПроснулсяПочистил зубыПошел на работу').where(lambda x: x).dropna().index.tolist()
print(s)
['Иван', 'Петр']
→ Ссылка