Преобразование Dataframe на основе значений двух столбцов
Имеется Dataframe res вида:
Код для создания DataFrame:
data = {'GP':[1,2,3,1,3,1,2,3,1,3,3,2], 'Year': [2020,2021,2022,2023,2020,2021,2022,2023,2020,2021,2022,2023], 'g_bot':[1,2,3,1,3,1,2,3,1,3,3,2], 'g_ham':[1,2,3,1,3,1,2,3,1,3,3,2], 'g_tal':[1,2,3,1,3,1,2,3,1,3,3,2]}
res = pd.DataFrame(data)
Необходимо получить res_total таблицу, группирующую значения по уровням GP 1-> g_bot, g_ham, g_tal -> сумма значений, GP 2-> g_bot, g_ham, g_tal -> сумма значений, GP 3-> g_bot, g_ham, g_tal -> сумма значений, в качестве индекса столбец Year такого вида:
Используя res = res.pivot_table(index='Year', columns='GP', values= ['g_bot', 'g_ham', 'g_tal'],aggfunc='sum')
Я получил следующий результат:
Как мне получить Dataframe необходимого вида(res_total)? Нужно указать другие аргументы в pivot_tableили же выполнить перегруппирование столбцов в получившейся таблице res?
Ответы (1 шт):
Воспользуйтесь DataFrame.swaplevel() и DataFrame.sort_index():
r = (res
.pivot_table(index='Year', columns='GP',
values=['g_bot', 'g_ham', 'g_tal'],
aggfunc='sum', fill_value=0)
.swaplevel(axis=1)
.sort_index(axis=1))
результат:
In [15]: r
Out[15]:
GP 1 2 3
g_bot g_ham g_tal g_bot g_ham g_tal g_bot g_ham g_tal
Year
2020 2 2 2 0 0 0 3 3 3
2021 1 1 1 2 2 2 3 3 3
2022 0 0 0 2 2 2 6 6 6
2023 1 1 1 2 2 2 3 3 3


