2012-03-26 12 views
14

trama de datos que tengo:Cómo obtener la hilera más cercana después de un índice de fecha y hora específica utilizando pandas Python

  A B C 
2012-01-01 1 2 3 
2012-01-05 4 5 6 
2012-01-10 7 8 9 
2012-01-15 10 11 12 

lo que estoy utilizando ahora:

date_after = dt.datetime(2012, 1, 7) 
frame.ix[date_after:].ix[0:1] 
Out[1]: 
      A B C 
2012-01-10 7 8 9 

¿Hay alguna forma mejor de hacer esto ? No me gusta que tenga que especificar .ix [0: 1] en lugar de .ix [0], pero si no lo hago, la salida cambia a un TimeSeries en lugar de a una sola fila en un DataFrame. Me resulta más difícil trabajar con un TimeSeries girado sobre el DataFrame original.

Sin .ix[0:1]:

frame.ix[date_after:].ix[0] 
Out[1]: 
A 7 
B 8 
C 9 
Name: 2012-01-10 00:00:00 

Gracias,

John

Respuesta

27

Es posible que desee ir directamente hacer el índice:

i = frame.index.searchsorted(date) 
frame.ix[frame.index[i]] 

Un toque prolijo, pero usted podría ponerlo en una función. Aproximadamente tan bueno como obtendrá (O(log n))

+5

Cualquier documentación para esto? – Pablojim

+0

@Pablojim: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.searchsorted.html?highlight=searchsorted#pandas.Index.searchsorted – naught101

3

No pude resistirme a responder a esto, a pesar de que la pregunta fue hecha, y respondida, en 2012, por el propio Wes. Sí, solo usa truncar.

df.truncate(before='2012-01-07') 
12

no pudo resistirse a responder a esta, a pesar de que se hizo la pregunta, y respondió, en 2012, por el propio Wes, y de nuevo en 2015, por AJSP. Sí, además de 'truncado', también se puede utilizar get_loc con la opción '' nearst

df.iloc[df.index.get_loc(datetime.datetime(2016,02,02),method='nearest')] 
+1

Esta es la respuesta que quiero. Pero parece que "más cercano" podría devolver una fila * anterior *. "relleno" parece devolver el más cercano después. – Ian

Cuestiones relacionadas