title: Python pandas: how to vectorize this function
body: <p>I have two DataFrames <code>df</code> and <code>evol</code> as follows (simplified for the example):</p>
  
  <pre><code>In[6]: df
  Out[6]:
     data  year_final  year_init
  0    12        2023       2012
  1    34        2034       2015
  2     9        2019       2013
  ...
  
  In[7]: evol
  Out[7]: 
        evolution
  year           
  2000   1.474946
  2001   1.473874
  2002   1.079157
  ...
  2037   1.463840
  2038   1.980807
  2039   1.726468
  </code></pre>
  
  <p>I would like to operate the following operation in a <strong>vectorized way</strong> (current for loop implementation is just too long when I have Gb of data):</p>
  
  <pre><code>for index, row in df.iterrows():
      for year in range(row['year_init'], row['year_final']):
          factor = evol.at[year, 'evolution']
          df.at[index, 'data'] += df.at[index, 'data'] * factor
  </code></pre>
  
  <p>Complexity comes from the fact that the range of year is not the same on each row...
  In the above example the ouput would be:</p>
  
  <pre><code>        data  year_final  year_init
  0     163673        2023       2012
  1  594596046        2034       2015
  2       1277        2019       2013
  </code></pre>
  
  <p>(full <code>evol</code> dataframe for testing purpose:)</p>
  
  <pre><code>      evolution
  year           
  2000   1.474946
  2001   1.473874
  2002   1.079157
  2003   1.876762
  2004   1.541348
  2005   1.581923
  2006   1.869508
  2007   1.289033
  2008   1.924791
  2009   1.527834
  2010   1.762448
  2011   1.554491
  2012   1.927348
  2013   1.058588
  2014   1.729124
  2015   1.025824
  2016   1.117728
  2017   1.261009
  2018   1.705705
  2019   1.178354
  2020   1.158688
  2021   1.904780
  2022   1.332230
  2023   1.807508
  2024   1.779713
  2025   1.558423
  2026   1.234135
  2027   1.574954
  2028   1.170016
  2029   1.767164
  2030   1.995633
  2031   1.222417
  2032   1.165851
  2033   1.136498
  2034   1.745103
  2035   1.018893
  2036   1.813705
  2037   1.463840
  2038   1.980807
  2039   1.726468
  </code></pre>