Pandas Dataframe Mask basado en el índice

Tengo el siguiente dataframe:

import pandas as pd index = pd.date_range('2013-1-1',periods=10,freq='15Min') data = pd.DataFrame(data=[1,2,3,4,5,6,7,8,9,0], columns=['value'], index=index) 

¿Cómo puedo generar una máscara basada en el valor del índice? Sé que puedo hacer algo como:

 data['value'] > 3 Out[40]: 2013-01-01 00:00:00 False 2013-01-01 00:15:00 False 2013-01-01 00:30:00 False 2013-01-01 00:45:00 True 2013-01-01 01:00:00 True 2013-01-01 01:15:00 True 2013-01-01 01:30:00 True 2013-01-01 01:45:00 True 2013-01-01 02:00:00 True 2013-01-01 02:15:00 False Freq: 15T, Name: value, dtype: bool 

Quiero generar una máscara para considerar solo algunas filas donde el índice está dentro de un rango determinado. Estaba pensando en hacer algo como data['index'].time() > datetime.time(1,15) para generar una máscara. Excepto los data['index'] del curso data['index'] fallan porque el índice no es el nombre de una columna. ¿Cómo puede hacer referencia al valor de índice para una fila en una máscara?

Puedes enmascarar usando indexer_between_time :

 In [11]: data.index.indexer_between_time(start='01:15', end='02:00') Out[11]: array([5, 6, 7, 8]) In [12]: data.iloc[data.index.indexer_between_time(start='1:15', end='02:00')] Out[12]: value 2013-01-01 01:15:00 6 2013-01-01 01:30:00 7 2013-01-01 01:45:00 8 2013-01-01 02:00:00 9 

Como puedes ver, accedes al índice por el atributo .index .

Nota: indexer_between_time de forma predeterminada, include_start y include_end son True, también ofrece un argumento tz para comparar la hora con una zona horaria diferente.

Las palabras clave ‘start’ y ‘stop’ están en desuso.Con pandas> 17.1; Tuve que usar la siguiente syntax en su lugar:

 data.iloc[data.index.indexer_between_time('1:15', '02:00')] Out[90]: value 2013-01-01 01:15:00 6 2013-01-01 01:30:00 7 2013-01-01 01:45:00 8 2013-01-01 02:00:00 9