title: Calculate mean of data rows in dataframe with date-headers, dictated by a 'datetime'-column
body: <p>I have a dataframe with ID's of clients and their expenses for 2014-2018. What I want is to have the mean of the expenses per ID but only the years before a certain date can be taken into account when calculating the mean value (so column 'Date' dictates which columns can be taken into account for the mean).</p>
  
  <p>Example: for index 0 (ID: 12), the date states '2016-03-08', then the mean should be taken from the columns 'y_2014' and 'y_2015', so then for this index, the mean is 111.0.
  If the date is too early (e.g. somewhere in 2014 or earlier in this case), then NaN should be returned (see index 6 and 9).</p>
  
  <p><strong>Initial dataframe:</strong></p>
  
  <pre class="lang-none prettyprint-override"><code>   y_2014  y_2015  y_2016  y_2017  y_2018        Date  ID  
  0   100.0   122.0     324     632     NaN  2016-03-08  12   
  1   120.0   159.0      54     452   541.0  2015-04-09  96   
  2     NaN   164.0     687     165   245.0  2016-02-15  20   
  3   180.0   421.0     512     184   953.0  2018-05-01  73  
  4   110.0   654.0     913     173   103.0  2017-08-04  84   
  5   130.0     NaN     754     124   207.0  2016-07-03  26   
  6   170.0   256.0     843      97   806.0  2013-02-04  87    
  7   140.0   754.0      95     101   541.0  2016-06-08  64    
  8    80.0   985.0     184      84    90.0  2019-03-05  11  
  9    96.0    65.0     127     130   421.0  2014-05-14  34     
  </code></pre>
  
  <p><strong>Desired output:</strong></p>
  
  <pre class="lang-none prettyprint-override"><code>   y_2014  y_2015  y_2016  y_2017  y_2018        Date  ID    mean
  0   100.0   122.0     324     632     NaN  2016-03-08  12   111.0
  1   120.0   159.0      54     452   541.0  2015-04-09  96   120.0
  2     NaN   164.0     687     165   245.0  2016-02-15  20   164.0
  3   180.0   421.0     512     184   953.0  2018-05-01  73  324.25
  4   110.0   654.0     913     173   103.0  2017-08-04  84   559.0
  5   130.0     NaN     754     124   207.0  2016-07-03  26   130.0
  6   170.0   256.0     843      97   806.0  2013-02-04  87     NaN
  7   140.0   754.0      95     101   541.0  2016-06-08  64     447
  8    80.0   985.0     184      84    90.0  2019-03-05  11   284.6
  9    96.0    65.0     127     130   421.0  2014-05-14  34     NaN
  </code></pre>
  
  <p><strong>Tried code:</strong> -> I'm still working on it, as I don't really know how to start for this, I only uploaded the dataframe so far, probably something with the 'datetime'-package has to be done to get the desired dataframe?</p>
  
  <pre class="lang-py prettyprint-override"><code>import pandas as pd 
  import numpy as np 
  import datetime
  
  df = pd.DataFrame({"ID":   [12,96,20,73,84,26,87,64,11,34],  
                   "y_2014": [100,120,np.nan,180,110,130,170,140,80,96],    
                   "y_2015": [122,159,164,421,654,np.nan,256,754,985,65],      
                   "y_2016": [324,54,687,512,913,754,843,95,184,127],    
                   "y_2017": [632,452,165,184,173,124,97,101,84,130],    
                   "y_2018": [np.nan,541,245,953,103,207,806,541,90,421],  
                   "Date": ['2016-03-08', '2015-04-09', '2016-02-15', '2018-05-01', '2017-08-04',                           
                            '2016-07-03', '2013-02-04', '2016-06-08', '2019-03-05', '2014-05-14']}) 
  print(df)
  </code></pre>