 <p>try this:</p> <pre><code>In [138]: df.apply(lambda x: int(x.name) + x) Out[138]: 2016 2017 2018 2019 2020 1 2016.014199 2017.020776 2018.016393 2019.010112 2020.013346 2 2016.025220 2017.024088 2018.035357 2019.026878 2020.031841 3 2016.016345 2017.014117 2018.017157 2019.019280 2020.017307 4 2016.021467 2017.020389 2018.027269 2019.027727 2020.025750 5 2016.012459 2017.004377 2018.015435 2019.023725 2020.031228 </code></pre> <p><strong>NOTE: @root's solution is much faster:</strong></p> <pre><code>In [150]: df = pd.concat([df] * 10**5, ignore_index=False) In [151]: df.shape Out[151]: (500000, 5) In [152]: %timeit df.apply(lambda x: int(x.name) + x) 10 loops, best of 3: 40.7 ms per loop In [153]: %timeit df.add(df.columns.map(int)) 100 loops, best of 3: 7.95 ms per loop </code></pre>