Ответ 1
Возможно, вам захочется перейти непосредственно к индексу:
i = frame.index.searchsorted(date)
frame.ix[frame.index[i]]
Прикосновение подробное, но вы можете поместить его в функцию. Примерно так же хорошо, как вы получите (O(log n)
)
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
Спасибо,
Джон
Возможно, вам захочется перейти непосредственно к индексу:
i = frame.index.searchsorted(date)
frame.ix[frame.index[i]]
Прикосновение подробное, но вы можете поместить его в функцию. Примерно так же хорошо, как вы получите (O(log n)
)
Не смог удержаться от ответа на этот вопрос, хотя вопрос был задан и ответил в 2012 году самим Уэсом и снова в 2015 году ajsp. Да, кроме 'truncate', вы также можете использовать get_loc с опцией "nearst"
df.iloc[df.index.get_loc(datetime.datetime(2016,02,02),method='nearest')]
Не смог удержаться от ответа на этот вопрос, хотя вопрос был задан и ответил в 2012 году самим Уэсом. Да, просто используйте truncate.
df.truncate(before='2012-01-07')