Pandas Добавить строку заголовка для MultiIndex

Учитывая следующий фрейм данных:

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

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

Заранее спасибо!


person Dance Party    schedule 21.05.2016    source источник


Ответы (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
person jezrael    schedule 21.05.2016