Как отобрать срез строк после фильтрования строк фрейма?
Имеется фрейм данных:
data = {'фрукт': ['арбуз','арбуз','арбуз','арбуз','груша', 'груша', 'груша', 'груша', 'вишня', 'абрикос', 'абрикос', 'абрикос', 'банан'],
'страна': ['россия','сша', np.nan, 'россия', np.nan, np.nan,'канада', 'франция', 'португалия', 'испания', np.nan, np.nan, 'перу'],
'вид_фр': ['1','2','3','10', '5', '7', '5', '6', '10', '5', '5', '7', '7']
}
dates = pd.DataFrame(data, columns = ['фрукт','страна', 'вид_фр'])
После применения фильтра для вывода строк с грушами, получаю такой результат:
Нужно получить срез (выделен также красным в первом скриншоте) со второй строки, содержащей грушу до значения следующего за послдней строкой, которая содержит грушу.
Как можно это сделать?
Ожидаемый результат:
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Попробуйте так:
idx = dates.query('фрукт == "груша"').index
res = dates.loc[idx.min()+1:idx.max()+1]
Автор решения: CrazyElf
→ Ссылка
Можно и "в лоб" решить, просто добавив к индексам среза 1:
dates.loc[dates.loc[dates.фрукт == 'груша'].index + 1]
Или тоже самое с помощью "сдвига" булевой маски среза на 1:
dates.loc[(dates.фрукт == 'груша').shift(fill_value=False)]
Вывод:
фрукт страна вид_фр
5 груша NaN 7
6 груша канада 5
7 груша франция 6
8 вишня португалия 10


