Заполнение базы данных pandas на основе индексов между двумя значениями

Я пытаюсь создать маску для трансляции в dataframes: логическая серия, которая указывает, является ли данная строка между двумя значениями. Это легко сделать для одного логического оператора, например, последних пяти элементов в кадре данных:

import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(10,1)) mask = (df.index.values>4) df.loc[mask,'column'] = range(0,5) 

Но как сделать одно и то же с более пересекающимися утверждениями? Например, вместо последних пяти компонентов в массиве я могу адресовать строки с 2 по 6? Пытаться использовать инструкцию AND для маски не удается, и я не могу использовать Inter на значения индекса dataframe.

    Я думаю, вы можете использовать mask основном, если дублируются значения индекса.

    Поэтому, если вы хотите использовать between работой только с серией, возможно использовать to_series или конструктор Series .

     mask = df.index.to_series().between(2,6) #mask = pd.Series(df.index, index=df.index).between(2,6) print (mask) 0 False 1 False 2 True 3 True 4 True 5 True 6 True 7 False 8 False 9 False dtype: bool mask = df.index.to_series().between(2,6).values print (mask) [False False True True True True True False False False] 

    Или условия цепи с помощью & :

     mask = (df.index >= 2) & (df.index <= 6) print (mask) [False False True True True True True False False False] 

    Но, возможно, лучше использовать loc если уникальный монотонный индекс:

     df.loc[2:6, 0] = range(5) print (df) 0 0 0.642933 1 0.912846 2 0.000000 3 1.000000 4 2.000000 5 3.000000 6 4.000000 7 0.504830 8 0.000422 9 0.029358