pandas использование shift совместно с условием для каждой группы
Имеется фрейм данных:
data = {'фрукт': ['абрикос', 'груша', 'абрикос', 'груша','вишня', 'банан'],
'страна': ['россия', 'франция', 'бельгия', 'албания','португалия', 'франция'],
'id': ['02','02','5', '5','5', '5'],
'месяц': ['март', 'сентябрь', 'январь', 'ПРОПУЩЕНО','январь', 'апрель']
}
df= pd.DataFrame(data, columns = ['фрукт','страна', 'id', 'месяц'])
Нужно отобрать строку перед строкой , где страна = франция, но предыдущей строкой считаем строки где страна не албания и не португалия.
df[(df.страна=='франция').shift(-1).fillna(False)] не понимаю как сюда можно добавить условие с игнорированием указанных стран и применить для каждой группы id. Как можно это сделать?
Ожидаемый результат:
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Я могу только через промежуточный датафрейм решение предложить - предварительно выкидываем строки, которые нам не подойдут, а потом уже делаем shift:
df1 = df[~df.страна.isin(['албания','португалия'])]
df1[(df1.страна=='франция').shift(-1).fillna(False)]
С группировкой вроде бы тоже кажется работает:
df1 = df[~df.страна.isin(['албания','португалия'])]
df1.groupby('id').apply(lambda x: x[(x.страна=='франция').shift(-1).fillna(False)]).reset_index(drop=True)

