How to get the n index numbers before/preceding a specific label?

Viewed 82

I have a dataset that looks as below; my objective is to create a list that contains the three index numbers before Accepted.

i       Label         value
0       Rejected       12
1       Rejected       10
2       Rejected       22
3       Rejected       32
4       Rejected       25
5       Rejected       15
6       Accepted       42
7       Accepted       52
8       Accepted       17
9       Accepted       8
10      Accepted       10
11      Rejected       21
12      Rejected       32
13      Rejected       12

The outcome for this example should be:

list = [3,4,5]

EDIT: This situation is repeated many times through my dataset. In some cases, the Accepted range can be only two samples like the following example:

i       Label         value
0       Rejected       12
1       Rejected       10
2       Rejected       22
3       Rejected       32
4       Rejected       25
5       Rejected       15
6       Accepted       42
7       Accepted       52
8       Rejected       17
9       Rejected       8
10      Rejected       10
11      Rejected       21
12      Rejected       32
13      Rejected       12
2 Answers

you can use:

df[df.Label.ne('Accepted')&df.Label.shift(-3).eq('Accepted')].index

Int64Index([3, 4, 5], dtype='int64', name='i')

You can use .loc:

index = df.loc[df['Label']=='Accepted', 'Label'].first_valid_index()
[index - i for i in range(1, 4)]
>> [5, 4, 3]
Related