2016-05-21 3 views
1

Учитывая следующий кадр данных:Панды Добавить заголовок строку для мультииндексного

d2=pd.DataFrame({'Item':['y','y','z','x'], 
       'other':['aa','bb','cc','dd']}) 
d2 

    Item other 
0 y  aa 
1 y  bb 
2 z  cc 
3 x  dd 

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

Item other 
    A  B 
0 y  aa 
1 y  bb 
2 z  cc 
3 x  dd 

Но опять же, количество столбцов будет меняться и не могут быть предсказаны.

Заранее благодарен!

ответ

1

Я думаю, вы можете сначала найти количество столбцов по shape, а затем создать список по range. Последнее создание MultiIndex.from_tuples.

print (d2.shape[1]) 
2 

print (range(d2.shape[1])) 
range(0, 2) 

cols = list(zip(d2.columns, range(d2.shape[1]))) 
print (cols) 
[('Item', 0), ('other', 1)] 

d2.columns = pd.MultiIndex.from_tuples(cols) 
print (d2) 

    Item other 
    0  1 
0 y aa 
1 y bb 
2 z cc 
3 x dd 

Если вам нужно алфавита столбцов и число столбцов меньше, как 26, используйте:

import string 
print (list(string.ascii_uppercase)) 
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] 

print (d2.shape[1]) 
2 

print (list(string.ascii_uppercase)[:d2.shape[1]]) 
['A', 'B'] 

cols = list(zip(d2.columns, list(string.ascii_uppercase)[:d2.shape[1]])) 
print (cols) 
[('Item', 'A'), ('other', 'B')] 

d2.columns = pd.MultiIndex.from_tuples(cols) 
print (d2) 
    Item other 
    A  B 
0 y aa 
1 y bb 
2 z cc 
3 x dd 
Смежные вопросы