Вот пример. FYI. Обычно легче ответить на них, когда вы публикуете некоторый код, который генерирует некоторый набор тестовых данных:)
Во-первых, вот набор данных. Здесь мы в основном пытаемся выбрать на основе истинных значений. Но мы хотим только 1 до и 1 после, поэтому мы не должны видеть, что все прошло.
import pandas as pd
import numpy as np
data = [
['gone', False],
['a', False],
['abb', True],
['a', False],
['gone', False],
['gone', False],
['a', False],
['abbb', True],
['a', False],
['gone', False],
['gone', False]
]
df = pd.DataFrame(data=data, columns=['label', 'indicator'])
ranges = df[df['indicator']].index.values
Далее мы генерируем диапазон интересующих нас строк. Для вашего случая вы бы хотели установить num_before и num_after по-разному. Вы, вероятно, можете несколько сжать код, но я подумал, что шаги легче понять таким образом.
num_before = 1
num_after = 1
indexes = [range(x-num_before, x+num_after+1) for x in ranges] #+1 due to the behaviour of range
x = [list(rang) for rang in indexes]
i = np.array(x).reshape(-1)
Наконец, мы выбираем строки, соответствующие сгенерированному списку, который мы только что создали.
df.iloc[i]
Выход:
