2014-01-29 7 views
13

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 

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

Представьте У меня уже есть dataframe вроде этого:

    a   b   c 
bar  0.102885 0.937838 0.907467 

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

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

Я не * думаю * есть, но определенно обязательно. Я думаю, что есть функция для этого на github ... –

+1

Хотя возникает ряд интересных вопросов, например «как выбрать конкретный столбец при наличии двух уровней имен столбцов?». – LondonRob

+2

x ['first'], x [(first ',' a ') или x.xs (' a ', axis = 1, level = 1)? : s –

ответ

19

Try это :

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

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

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

Кому-то может понравиться этот ответ Роменом [здесь] (https: // stackoverflow .com/a/40225796/8508004) для выполнения чего-то подобного, но без кортежей, поскольку добавляется все тот же уровень. – Wayne

Смежные вопросы