Создание столбцов из значений индекса

#python #python-3.x #pandas

#python #python-3.x #pandas

Вопрос:

Допустим, у меня есть мои данные в форме, как в этом примере

 idx = pd.MultiIndex.from_product([[1, 2, 3, 4, 5, 6], ['a', 'b', 'c']],
                                 names=['numbers', 'letters'])
col = ['Value']

df = pd.DataFrame(list(range(18)), idx, col)

print(df.unstack())
  

Результат будет

             Value        
letters     a   b   c
numbers              
1           0   1   2
2           3   4   5
3           6   7   8
4           9  10  11
5          12  13  14
6          15  16  17
  

letters и numbers являются индексами, а значение — единственным столбцом

Вопрос в том, как я могу заменить Value столбец столбцами, названными как значения индекса letters ?

Поэтому я хотел бы получить такой результат

 numbers     a   b   c         
1           0   1   2
2           3   4   5
3           6   7   8
4           9  10  11
5          12  13  14
6          15  16  17
  

где a , b и c — столбцы, а числа — единственный индекс.

Ценю вашу помощь.

Ответ №1:

Проблема вызвана тем, что вы используете unstack с DataFrame , а не pd.Series

 df.Value.unstack().rename_axis(None,1)
Out[151]: 
          a   b   c
numbers            
1         0   1   2
2         3   4   5
3         6   7   8
4         9  10  11
5        12  13  14
6        15  16  17
  

Комментарии:

1. Проблема вызвана тем, что вы используете unstack с DataFrame, а не pd.Series — это ключ! Спасибо

Ответ №2:

Ответ Вен-Бена в первую очередь предотвращает запуск фрейма данных с несколькими уровнями столбцов.

Если вы все равно застряли с многоиндексным столбцом, вы можете избавиться от него, используя .droplevel() :

 df = df.unstack()
df.columns = df.columns.droplevel()

df

Out[7]: 
letters   a   b   c
numbers            
1         0   1   2
2         3   4   5
3         6   7   8
4         9  10  11
5        12  13  14
6        15  16  17