Вы можете определить функцию, которая случайным образом выбирает n кусков из 5 последовательных чисел в массиве Numpy, если таковой имеется.
def get_chunks(x, n):
chunks = np.split(x, np.where(np.diff(x) != 1)[0]+1) # split consecutives
chunks = [c for c in chunks if len(c) >=5] # get only chuncks with more than 5 elements
if len(chunks) >= n:
n_chunks = [chunks[i] for i in np.random.choice(range(len(chunks)), n, replace=False)] # choose n chunks
rs = [np.random.choice(np.arange(0, len(chunk) -4)) for chunk in chunks] # get 5 elements from each chunk
return [n_chunks[i][rs[i]: rs[i]+5] for i in range(len(n_chunks))]
else:
return None
А затем примените его к индексам вашего фрейма данных. На вашем примере мы получили бы следующее:
In [1]: indices = df.reset_index().groupby('target')['index'].apply(np.array)['Fail']
get_chunk(indices, 2)
Out[1]: [array([ 6, 7, 8, 9, 10]), array([0, 1, 2, 3, 4])]