Marco de datos de pandas por índice y entero

Así que tengo un dataframe de pandas indexado por fecha.

Necesito tomar un valor del dataframe por fecha … y luego tomar el valor del dataframe del día anterior … excepto que no puedo simplemente restar un día, ya que los fines de semana y los días festivos faltan.

Sería genial si pudiera escribir:

x = dataframe.ix[date] 

y

 i = dataframe.ix[date].index date2 = dataframe[i-1] 

No estoy casada con esta solución. Si hubiera una forma de obtener la fecha o el número de índice exactamente uno antes de la fecha que conozco, me sentiría feliz … (sin hacer un bucle a través de todo el dataframe y las pruebas para ver si tengo una coincidencia, y guardar el conteo) …)

Use .get_loc para obtener la posición entera de un valor de etiqueta en el índice:

 In [51]: df = pd.DataFrame(index=pd.date_range(start=dt.datetime(2015,1,1), end=dt.datetime(2015,2,1)), data={'a':np.arange(32)}) df Out[51]: a 2015-01-01 0 2015-01-02 1 2015-01-03 2 2015-01-04 3 2015-01-05 4 2015-01-06 5 2015-01-07 6 2015-01-08 7 2015-01-09 8 2015-01-10 9 2015-01-11 10 2015-01-12 11 2015-01-13 12 2015-01-14 13 2015-01-15 14 2015-01-16 15 2015-01-17 16 2015-01-18 17 2015-01-19 18 2015-01-20 19 2015-01-21 20 2015-01-22 21 2015-01-23 22 2015-01-24 23 2015-01-25 24 2015-01-26 25 2015-01-27 26 2015-01-28 27 2015-01-29 28 2015-01-30 29 2015-01-31 30 2015-02-01 31 

Aquí utilizando .get_loc en el índice devolverá la posición ordinal:

 In [52]: df.index.get_loc('2015-01-10') Out[52]: 9 

pase este valor usando .iloc para obtener un valor de fila por posición ordinal:

 In [53]: df.iloc[df.index.get_loc('2015-01-10')] Out[53]: a 9 Name: 2015-01-10 00:00:00, dtype: int32 

Luego puedes restar 1 de esto para obtener la fila anterior:

 In [54]: df.iloc[df.index.get_loc('2015-01-10') - 1] Out[54]: a 8 Name: 2015-01-09 00:00:00, dtype: int32