Operating multiple columns of one pandas DataFrame using data from another
So, don't tell my boss, but I spent almost an entire day trying to improve this code. I have found a much better solution, but I would still love to hear from anyone who is more experienced than me.

real = nominal.copy()
years = ['year1', 'year2' ... 'year11']
incomes = ['income1', 'income2' ... 'income11']
savings = ['savings1', 'savings2' ... 'savings11']

for i in xrange(len(years)):
    interviewed = real[(real[years[i]].notnull())].copy() # to avoid the NaNs
    interview_years = list(interviewed[years[i]].unique())
    for y in interview_years:
        temp = interviewed[(interviewed[years[i]] == y)].copy()
        temp[incomes[i]] = temp[incomes[i]] *\
                           annual_inflation.loc[int(y), 'ratio to 2014']
        temp[savings[i]] = temp[savings[i]] *\
                           annual_inflation.loc[int(y), 'ratio to 2014']
        interviewed[(interviewed[years[i]] == y)] = temp 
    real[(real[years[i]].notnull())] = interviewed


Basically the old block was slow because it assessed each column and then each row, looking for elements to manipulate. This block is a lot faster because it starts by slicing out all of the elements that need to be manipulated, then manipulates them all at once, then puts them back in their original place.