Вывести последовательные строки по условию 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)
['Иван', 'Петр']
