title: Index a dataframe based on a date column
body: <p>I'd like to do a manual train-test-split for a random forest or linear regression on a dataframe called <code>whatever_df</code> based on the <code>Date</code> column. I would use this column to select all rows that have dates earlier than 3 months before the most recent one in the column to make a new dataframe called <code>train_df</code> with those older dates, and a <code>test_df</code> with all the dates within the latest 3 months. In raw format the dataframe looks like:</p>
  <pre class="lang-py prettyprint-override"><code>        PC1         PC2         Date
  0      -0.319258    -0.042817   2019-05-24
  1      -0.246079    0.131233    2019-05-24
  2      -0.037325    0.562841    2019-05-24
  3      -0.080725    0.594007    2019-05-24
  4       0.133341    0.322822    2019-05-24
               ...    ...   ...   ...
  3607    -3.583419   3.766158    2022-06-26
  3608    -3.305263   4.019327    2022-06-26
  3609    -2.913036   4.854316    2022-06-26
  3610    -2.755733   4.873996    2022-06-26
  3611    -2.535929   4.582312    2022-06-26
  </code></pre>
  <p>So what I'd want for <code>train_df</code> would be all the rows where <code>Date</code> is up through March 2022 inclusive and <code>test_df</code> would be all the rows for March 2022-June 2022. I know I could just hardcode this but I would like a dynamic way to select rows based on month values, and I know with <code>datetime</code> formatted columns I could find the newest date with just <code>max(df['Date'])</code> but I'm not sure how to say in Python <code>subtract 3 months from that</code></p>
  <p>I have tried this:</p>
  <pre class="lang-py prettyprint-override"><code>whatever_df['Month'] = pd.DatetimeIndex(whatever_df['Date']).month
  </code></pre>
  <p>To get</p>
  <pre><code>     PC1        PC2         Date      Month
  0   -0.319258   -0.042817   2019-05-24  5
  1   -0.246079   0.131233    2019-05-24  5
  2   -0.037325   0.562841    2019-05-24  5
  3   -0.080725   0.594007    2019-05-24  5
  4   0.133341    0.322822    2019-05-24  5
  ... ... ... ... ...
  3607    -3.583419   3.766158    2022-06-26  6
  3608    -3.305263   4.019327    2022-06-26  6
  3609    -2.913036   4.854316    2022-06-26  6
  3610    -2.755733   4.873996    2022-06-26  6
  3611    -2.535929   4.582312    2022-06-26  6
  </code></pre>
  <p>And I know I could use:</p>
  <pre><code>from datetime import datetime
  from dateutil.relativedelta import relativedelta
  </code></pre>
  <p>To subtract 3 months from the <code>Month</code> column, however I'm not sure how that would work with January and February. Any ideas?</p>