1

I have a dataframe as following, the index is datetime(every Friday in a week).

       begin    close
   date
  2014-1-10  1.0     2.5
  2014-1-17  2.6     2.6
  ........................
  2016-12-30  3.5     3.8
  2017-6-16   4.5     4.7

I want to extract the previour 2 year data from 2017-6-16. My code is following.

import datetime
from dateutil.relativedelta import relativedelta

 df_index = df.index
 df_index_test = df_index[-1] - relativedelta(years=2)
 df_test = df[df_index_test:-1]

But it seems it is wrong, since the day of df_index_test may not in the dataframe. Thanks!

tktktk0711
  • 1,656
  • 7
  • 32
  • 59

1 Answers1

1

You need boolean indexing, instead relativedelta is possible use DateOffset:

df_test = df[df.index >= df_index_test]

Sample:

rng = pd.date_range('2001-04-03', periods=10, freq='15M')
df = pd.DataFrame({'a': range(10)}, index=rng)  
print (df)
            a
2001-04-30  0
2002-07-31  1
2003-10-31  2
2005-01-31  3
2006-04-30  4
2007-07-31  5
2008-10-31  6
2010-01-31  7
2011-04-30  8
2012-07-31  9

df_test = df[df.index >= df.index[-1] - pd.offsets.DateOffset(years=2)]
print (df_test)
            a
2011-04-30  8
2012-07-31  9
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252
  • thanks@jezrael, there is another issue:https://stackoverflow.com/questions/44649687/python2-7-dataframe-add-new-column-from-existed-column-value – tktktk0711 Jun 20 '17 at 09:55
  • I add answer, but it was really complicated. Please check it. – jezrael Jun 20 '17 at 11:23