Я не могу представить себе способ аккуратно векторизовать операцию.Но кадр данных легко сканировать, чтобы составить список пропускаемых строк.Таким образом, код может быть:
cur = 0
to_drop = []
for row in example_i.itertuples():
if cur != row[0][0]:
cur = row[0][0]
drop = False
if drop:
to_drop.append(row[0])
if row[1] == 1:
drop = True
to_drop
теперь должно быть [(1, 2015), (1, 2016), (2, 2016), (4, 2015), (4, 2016), (5, 2015), (5, 2016)]
Так что этого достаточно, чтобы отбросить строки:
example_i.drop(to_drop, inplace=True)
и мы имеем, как и ожидалось:
default
id time
1 2013 0
2014 1
2 2013 0
2014 0
2015 1
3 2013 0
2014 0
2015 0
2016 0
4 2013 1
5 2013 0
2014 1