Я нашел этот способ, используя more_itertools
с учетом s
- это серия (а не список, который вы предоставили):
Сначала сгруппируйте список в последовательные элементы дляиндекс, который удовлетворяет условию:
import more_itertools as mit
a = [list(group) for group in mit.consecutive_groups(s.loc[s.eq(0)].index.tolist())]
Во-вторых, выберите первую и последнюю записи из списка
list(set([i[0] for i in a]+[x[-1] for x in a]))
#[3, 5, 8, 12, 15]
РЕДАКТИРОВАТЬ для получения первого и последнего индекса, где 0 больше 3, используйте:
list(set([i[0] for i in a if len(i)>3]+[x[-1] for x in a if len(x)>3]))
#[8, 12]