Прямо перед неприятным for year in range(...)
l oop, вы сделали:
house_data.columns = pd.to_datetime(house_data.columns).to_period('M')
Это означает, что ваши столбцы больше не являются строками. Таким образом, внутри for l oop:
house_data[str(year)+'q2'] = house_data[[str(year)+'-04',...]].mean(axis=1)
произойдет сбой и возникнет эта ошибка, поскольку нет столбца с строкой именем. Чтобы исправить это, сделайте следующее:
house_data.columns = pd.to_datetime(house_data.columns).to_period('M').strftime('%Y-%m')
Однако вам лучше сделать:
house_data.columns = pd.to_datetime(house_data.columns).to_period('Q')
house_data.groupby(level=0, axis=1).mean()