2013-03-01 29 views
12

Tôi có một dataframe gấu trúc với chỉ số datetimenhận được giá trị trước đó của chỉ số gấu trúc 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 

và muốn đánh giá ba giá trị trước đó của chỉ số datetime nhất định.

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

tôi tìm kiếm này, nhưng kể từ khi chỉ số của tôi là một ngày tôi không thể làm

df.ix[int-1] 
+0

Bạn có chỉ mục cho mỗi ngày hoặc có một số ngày bỏ qua không? –

+0

Ví dụ: có một số ngày bỏ qua, ngày nghỉ cuối tuần và ngày lễ. – trbck

+0

Câu hỏi này có thể giúp bạn: [slice pandas timeseries vào ngày +/- 2 ngày làm việc] (http://stackoverflow.com/questions/14092339/slice-pandas-timeseries-on-date-2-business-days) –

Trả lời

12

Dưới đây là một cách để làm điều đó, đầu tiên lấy vị trí số nguyên của khóa index qua 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 

Và sau đó bạn có thể sử dụng iloc (để có được vị trí số nguyên, hoặc lát theo vị trí số nguyên):

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 

Xem indexing section of the docs.


Tôi không chắc chắn cách bạn thiết lập DataFrame của mình, nhưng điều đó không giống như chỉ mục thời gian cho tôi. Đây là cách tôi nhận DataFrame (với chỉ mục Dấu thời gian):

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

hỗ trợ cho irow đã không được chấp nhận: http://pandas.pydata.org/pandas-docs/version/0.19.2/generated/pandas.DataFrame.irow.html, iloc [...] nên được sử dụng thay thế – user2413548

+0

@ user2413548 cảm ơn, tôi cần viết một kịch bản để xem qua tất cả các câu trả lời này! –

Các vấn đề liên quan