У меня есть dataframe, который выглядит следующим образом:Более эффективный способ изменить порядок столбцов панд и выполнять вычисления
+---+-------------+-------------+-------------+-------------+------------+------------+------------+------------+
| | cat1 - Sept | cat2 - Sept | cat3 - Sept | cat4 - Sept | cat1 - Aug | cat2 - Aug | cat3 - Aug | cat4 - Aug |
+---+-------------+-------------+-------------+-------------+------------+------------+------------+------------+
| 0 | 49 | 6 | 35 | 24 | 15 | 10 | 45 | 37 |
| 1 | 4 | 2 | 32 | 20 | 21 | 26 | 43 | 41 |
| 2 | 3 | 42 | 22 | 8 | 15 | 17 | 45 | 3 |
| 3 | 3 | 5 | 32 | 14 | 28 | 11 | 45 | 3 |
| 4 | 4 | 22 | 9 | 50 | 1 | 8 | 16 | 23 |
| 5 | 10 | 15 | 9 | 41 | 3 | 35 | 30 | 34 |
| 6 | 21 | 4 | 12 | 44 | 43 | 32 | 12 | 10 |
| 7 | 4 | 49 | 42 | 30 | 11 | 25 | 27 | 24 |
| 8 | 46 | 18 | 46 | 29 | 36 | 5 | 46 | 23 |
+---+-------------+-------------+-------------+-------------+------------+------------+------------+------------+
В действительности, каждый из месяцев имеют 15 категорий. То, что я хотел бы сделать, это преобразование кадра данных к этому:
+---+-------------+----------+-------------+----------+-------------+----------+-------------+----------+
| | cat1 - Sept | % Change | cat2 - Sept | % Change | cat3 - Sept | % Change | cat4 - Sept | % Change |
+---+-------------+----------+-------------+----------+-------------+----------+-------------+----------+
| 0 | 49 | 227% | 6 | -40% | 35 | -22% | 24 | -35% |
| 1 | 4 | -81% | 2 | -92% | 32 | -26% | 20 | -51% |
| 2 | 3 | -80% | 42 | 147% | 22 | -51% | 8 | 167% |
| 3 | 3 | -89% | 5 | -55% | 32 | -29% | 14 | 367% |
| 4 | 4 | 300% | 22 | 175% | 9 | -44% | 50 | 117% |
| 5 | 10 | 233% | 15 | -57% | 9 | -70% | 41 | 21% |
| 6 | 21 | -51% | 4 | -88% | 12 | 0% | 44 | 340% |
| 7 | 4 | -64% | 49 | 96% | 42 | 56% | 30 | 25% |
| 8 | 46 | 28% | 18 | 260% | 46 | 0% | 29 | 26% |
+---+-------------+----------+-------------+----------+-------------+----------+-------------+----------+
Это очень легко сделать, но это требует много кода и очень ручной:
- Перегруппируйте колонны, так что каждый категория находится рядом с соответствующим месяцем
- Создать новую колонку для всех категорий, чтобы вычислить процентное изменение по сравнению
- Удалить августовских столбцы
Я ищу конкретную функцию или идиому pandas для организации столбцов, чтобы сократить код и сделать его более эффективным.
Благодарим за это! Я получаю эту ошибку 'KeyError: 'MultiIndex Slicing требует, чтобы индекс был полностью lexsorted tuple len (2), глубина lexsort (0)'' здесь 'df = df.loc [:, idx [:, 'Sept'] ] '. мысли? – metersk
К сожалению, необходимо отсортировать после присвоения «MultiIndex», отредактированного выше. – chrisb
Мысли об этой ошибке? 'df = df.sort_index (axis = 1, level = (0,1)) TypeError: sort_index() получил неожиданный аргумент ключевого слова« уровень ». Документы ясно показывают, что уровень - это kw arg. Идк, почему это неожиданно. – metersk