I have a pandas dataframe with datetime index
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
and want to evaluate the previous three values of the given datetime index.
date = "2013-02-27 00:00:00+00:00" df.ix[date]
I searched for this but since my index is a date I can't do
df.ix[int-1]
Here's one way to do it, first grab the integer location of the index key via 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
And then you can use iloc
(to get the integer location, or slice by integer location):
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
See the indexing section of the docs.
I'm not quite sure how you set up your DataFrame, but that doesn't look like a Datetime Index to me. Here's how I got the DataFrame (with Timestamp index):
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
Could you just do df.shift().loc[date]
?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With