Как получить ближайшую одну строку после определенного индекса datetime с помощью Python Pandas

DataFrame У меня есть:

            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 

Что я сейчас использую:

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

Есть ли лучший способ сделать это? Мне не нравится, что я должен указать .ix [0: 1] вместо .ix [0], но если я не выхожу на выход, то вместо TimeSeries вместо одной строки в DataFrame. Мне труднее работать с вращающимся TimeSeries поверх исходного DataFrame.

Без .ix[0:1]:

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

Спасибо,

Джон

Ответы

Ответ 1

Возможно, вам захочется перейти непосредственно к индексу:

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

Прикосновение подробное, но вы можете поместить его в функцию. Примерно так же хорошо, как вы получите (O(log n))

Ответ 2

Не смог удержаться от ответа на этот вопрос, хотя вопрос был задан и ответил в 2012 году самим Уэсом и снова в 2015 году ajsp. Да, кроме 'truncate', вы также можете использовать get_loc с опцией "nearst"

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

Ответ 3

Не смог удержаться от ответа на этот вопрос, хотя вопрос был задан и ответил в 2012 году самим Уэсом. Да, просто используйте truncate.

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