Как получить ближайшую единственную строку после определенного индекса даты и времени, используя Python Pandas - PullRequest
15 голосов
/ 26 марта 2012

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

Спасибо,

Джон

Ответы [ 3 ]

29 голосов
/ 29 марта 2012

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

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

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

20 голосов
/ 22 октября 2016

Не удержался от ответа на этот вопрос, хотя вопрос был задан и получен ответ в 2012 году самим Уэсом, а затем в 2015 году - с помощью ajsp.Да, помимо «усечения», вы также можете использовать get_loc с параметром «ближайший»

df.iloc[df.index.get_loc(datetime.datetime(2016,02,02),method='nearest')]
4 голосов
/ 17 декабря 2015

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

df.truncate(before='2012-01-07')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...