Pandas: Многоуровневые имена столбцов

pandas поддерживает многоуровневые имена столбцов:

>>>  x = pd.DataFrame({'instance':['first','first','first'],'foo':['a','b','c'],'bar':rand(3)})
>>> x = x.set_index(['instance','foo']).transpose()
>>> x.columns
MultiIndex
[(u'first', u'a'), (u'first', u'b'), (u'first', u'c')]
>>> x
instance     first                    
foo              a         b         c
bar       0.102885  0.937838  0.907467

Эта функция очень полезна, поскольку она позволяет добавлять несколько версий одного и того же блока данных "по горизонтали" с 1-м уровнем имен столбцов (в моем примере instance), различая экземпляры.

Представьте, что у меня уже есть dataframe:

                 a         b         c
bar       0.102885  0.937838  0.907467

Есть ли хороший способ добавить еще один уровень в имена столбцов, аналогично этому для индекса строки:

x['instance'] = 'first'
x.set_level('instance',append=True)

Ответ 1

Попробуйте следующее:

df=pd.DataFrame({'a':[1,2,3],'b':[4,5,6]})

columns=[('c','a'),('c','b')]

df.columns=pd.MultiIndex.from_tuples(columns)