У меня есть (очень) большой мультииндексированный фрейм данных с одним логическим столбцом. например:
bool_arr = np.random.randn(30)<0
df = pd.concat(3*[pd.DataFrame(np.random.randn(10, 3), columns=['A','B','C'])],
keys=np.array(['one', 'two', 'three']))
df['bool'] = bool_arr
df.index.rename(['Ind1', 'Ind2'], inplace=True)
Я пытаюсь установить логический столбец в False для 2 первых и 2 последних индексов каждого внутреннего кадра данных, но только если 3-й (или 3-й до последнего) нет Правда. То есть я хочу, чтобы первая и последняя 3 логических записи были одинаковыми.
Я могу сделать это, перебирая каждый уровень индекса, извлекая внутренние кадры данных один за другим и сбрасывая соответствующие значения, затем подключая новую серию обратно к копии исходного кадра данных. Но это очень расточительно как во времени, так и в памяти.
Есть ли более быстрый способ сделать это?
(Я должен добавить, что в моем примере все внутренние кадры данных имеют одинаковую длину, но это не обязательно так для меня)