Первой идеей является использование reset_index
:
table = pd.pivot_table(df_firms1.reset_index(),
index=['code_city', 'year'],
columns=['production', 'diversity'])
Но с примерами данных получаем:
DataError: Нет числовых типов для агрегирования
Поэтому необходимо преобразовать year
столбец в datetime, а затем set_index
с параметром append=True
для MultiIndex
с rename_axis
для удаления имен индексов:
df_firms1['year'] = pd.PeriodIndex(df_firms1['year'], freq='A').to_timestamp(how='e')
#alternative solution
#df_firms1['year'] = pd.to_datetime(df_firms1['year'], format='%Y') + pd.offsets.YearEnd()
df_firms1 = df_firms1.set_index('year', append=True).rename_axis([None, None])
print (df_firms1)
production diversity
10701 2007-12-31 1096895.118 97
2008-12-31 1485981.356 101
2009-12-31 1592737.910 110
10702 2007-12-31 1196895.116 95
2008-12-31 1285981.355 102
2009-12-31 1392737.913 111
10703 2007-12-31 1496895.112 92
2008-12-31 1585981.351 105
2009-12-31 1692737.916 116