Как удалить группы строк по условию?
Имеется фрейм данных:
data = {'фрукт': ['груша','огурец','вишня', 'абрикос', 'груша','арбуз','груша','банан', 'груша', 'вишня','яблоко', 'груша', 'вишня', 'абрикос', 'груша', 'банан'],
'страна': ['россия','сша', 'россия','россия', 'франция','ЮАР','франция', 'россия', np.nan,'россия','андорра', 'франция', 'португалия', 'россия', np.nan, 'россия'],
'id': ['01','01','01','02','02','03','03','011', '011', '011','011', '6', '6', '5', '5', '5'],
'месяц': ['март','январь','январь','март', 'сентябрь','март','октябрь', 'март', 'ноябрь', 'январь','январь', 'март', 'январь', 'январь', 'ПРОПУЩЕНО', 'апрель']
}
dates = pd.DataFrame(data, columns = ['фрукт','страна', 'id', 'месяц'])
Нужно удалить строки с id (предварительно проведя группировку по id), где значения месяца идут последовательно со значениями, где:
- март
- октябрь \ ноябрь
- январь
Или со значениями , где:
- март
- январь
На первом рисунке зачеркнуты строки, которые нужно удалять. В общем случае в группе id может быть бесконечное число строк, важно при наличии описанной последовательности
Как это можно сделать?
Ожидаемый результат:
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
patterns = [["март", "январь"], ["март","октябрь", "январь"], ["март", "ноябрь", "январь"]]
res = df.groupby("id").filter(lambda x: x["месяц"].unique().tolist() not in patterns)
результат:
In [134]: res
Out[134]:
фрукт страна id месяц
3 абрикос россия 02 март
4 груша франция 02 сентябрь
5 арбуз ЮАР 03 март
6 груша франция 03 октябрь
13 абрикос россия 5 январь
14 груша NaN 5 ПРОПУЩЕНО
15 банан россия 5 апрель

