Подтвердить что ты не робот

Получить предыдущее значение pandas индекса datetime

У меня есть pandas датафрейм с индексом datetime

Date
2013-02-22 00:00:00+00:00    0.280001
2013-02-25 00:00:00+00:00    0.109999
2013-02-26 00:00:00+00:00   -0.150000
2013-02-27 00:00:00+00:00    0.130001
2013-02-28 00:00:00+00:00    0.139999
Name: MOM12

и хотите оценить предыдущие три значения данного индекса datetime.

date = "2013-02-27 00:00:00+00:00"
df.ix[date]

Я искал это, но поскольку мой индекс - это дата, которую я не могу сделать

df.ix[int-1]
4b9b3361

Ответ 1

Здесь один из способов сделать это, сначала захватить целочисленное расположение ключа индекса с помощью get_loc:

In [15]: t = pd.Timestamp("2013-02-27 00:00:00+00:00")

In [16]: df1.index.get_loc(t)
Out[16]: 3

И затем вы можете использовать iloc (чтобы получить целочисленное местоположение или срез по целочисленному местоположению):

In [17]: loc = df1.index.get_loc(t)

In [18]: df.iloc[loc - 1]
Out[18]: 
Date    2013-02-26 00:00:00
                      -0.15
Name: 2, Dtype: object

In [19]: df1.iloc[slice(max(0, loc-3), min(loc, len(df)))]
        # the min and max feel slightly hacky (!) but needed incase it within top or bottom 3
Out[19]:                         
Date                    
2013-02-22  0.280001
2013-02-25  0.109999
2013-02-26 -0.150000

Смотрите раздел индексация документов.


Я не совсем уверен, как вы настроили свой DataFrame, но для меня это не похоже на индекс Datetime. Вот как я получил DataFrame (с индексом отметки времени):

In [11]: df = pd.read_clipboard(sep='\s\s+', header=None, parse_dates=[0], names=['Date', None])

In [12]: df
Out[12]: 
                 Date          
0 2013-02-22 00:00:00  0.280001
1 2013-02-25 00:00:00  0.109999
2 2013-02-26 00:00:00 -0.150000
3 2013-02-27 00:00:00  0.130001
4 2013-02-28 00:00:00  0.139999

In [13]: df1 = df.set_index('Date')

In [14]: df1
Out[14]:                
Date                
2013-02-22  0.280001
2013-02-25  0.109999
2013-02-26 -0.150000
2013-02-27  0.130001
2013-02-28  0.139999