2013-03-01 19 views
12

Mam dataframe pandy z indeksem datetimeuzyskać poprzednią wartość indeksu pandy 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 

i chcesz ocenić dotychczasowe trzy wartości danego indeksu datetime.

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

szukałem tego, ale ponieważ mój indeks jest data nie mogę zrobić

df.ix[int-1] 
+0

Czy masz indeksu na każdy dzień lub są tam niektóre pominięte dzień? –

+0

Na przykład są pominięte dni, weekendy i święta. – trbck

+0

To pytanie może ci pomóc: [pandy czasowe pandy na datę +/- 2 dni robocze] (http://stackoverflow.com/questions/14092339/slice-pandas-timeseries-on-date-2-business-days) –

Odpowiedz

12

Oto jeden ze sposobów, aby to zrobić, należy najpierw pobrać lokalizację całkowitą klucza indeksu poprzez 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 

a następnie można użyć iloc (aby uzyskać lokalizację Integer, kawałek po całkowitej lokalizacji):

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's within top or bottom 3 
Out[19]:       
Date      
2013-02-22 0.280001 
2013-02-25 0.109999 
2013-02-26 -0.150000 

Zobacz indexing section of the docs.


Nie jestem pewien, w jaki sposób skonfigurować DataFrame, ale to nie wygląda datetime Główna mnie. Oto jak mam DataFrame (z indeksem Timestamp):

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 
+0

obsługa programu irow została uznana za przestarzałą: http://pandas.pydata.org/pandas-docs/version/0.19.2/generated/pandas.DataFrame.irow.html, iloc [...] powinien być użyty zamiast: – user2413548

+0

@ user2413548 dzięki, muszę napisać skrypt, aby przejść przez wszystkie te odpowiedzi! –

Powiązane problemy