#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