Как изменить порядок / группировку / уровень столбцов Pandas MultiIndex?

Я пытаюсь переупорядочить / swaplevel / pivot / something столбцы в кадре данных pandas. Столбцы – это MultiIndex, но я не могу найти соус, чтобы делать то, что хочу.

Самый быстрый переменный столбец в моем мультииндексе – месяц, но я бы хотел, чтобы это был самый медленный столбец.

У меня есть ноутбук nbviewer, если вы хотите попробовать сами: http://nbviewer.ipython.org/gist/flamingbear/4cfac24c80fe34a67474

Что у меня есть:

+-------------------------------------------------------------------+ |+-----+------+------+-----+------+-----+-----+------+-----+-----+ | || |weight |extent |rank || |+-----+------+------+-----+------+-----+-----+------+-----+-----+ | ||month|'1Jan'|'Feb' |'Mar'|'1Jan'|'Feb'|'Mar'|'1Jan'|'Feb'|'Mar'| | |+-----+------+------+-----+------+-----+-----+------+-----+-----+ | ||year | | | | | | | | | | | |+-----+------+------+-----+------+-----+-----+------+-----+-----+ | ||2000 |45.1 |46.1 |25.1 |13.442|14.94|15.02|13 |17 |14 | | |+-----+------+------+-----+------+-----+-----+------+-----+-----+ | ||2001 |85.0 |16.0 |49.0 |13.380|14.81|15.14|12 |15 |17 | | |+-----+------+------+-----+------+-----+-----+------+-----+-----+ | ||2002 |90.0 |33.0 |82.0 |13.590|15.13|14.88|15 |22 |10 | | |+-----+------+------+-----+------+-----+-----+------+-----+-----+ | ||2003 |47.0 |34.0 |78.0 |13.640|14.83|15.27|17 |16 |22 | | |+-----+------+------+-----+------+-----+-----+------+-----+-----+ | +-------------------------------------------------------------------+ 

Что я хочу

 +------------------------------------------------------------------+ |+-----+------+------+----+------+------+-----+------+------+----+ | ||month|1Jan |Feb |Mar || |+-----+------+------+----+------+------+-----+------+------+----+ | || |weight|extent|rank|weight|extent|rank |weight|extent|rank| | |+-----+------+------+----+------+------+-----+------+------+----+ | ||year | | | | | | | | | | | |+-----+------+------+----+------+------+-----+------+------+----+ | ||2000 |45.1 |13.442|13 |46.1 |14.94 |17 | 25.1 |15.02 |14 | | |+-----+------+------+----+------+------+-----+------+------+----+ | ||2001 |85.0 |13.380|12 |16.0 |14.81 |15 | 49.0 |15.14 |17 | | |+-----+------+------+----+------+------+-----+------+------+----+ | ||2002 |90.0 |13.590|15 |33.0 |15.13 |22 | 82.0 |14.88 |10 | | |+-----+------+------+----+------+------+-----+------+------+----+ | ||2003 |47.0 |13.640|17 |34.0 |14.83 |16 | 78.0 |15.27 |22 | | |+-----+------+------+-----------+------+-----+------+------+----+ | +------------------------------------------------------------------+ 

Любая помощь будет оценена по достоинству. Я могу работать с моим исходным DataFrame, но запись в CSV с желаемым заказом была бы фантастической.

Заранее спасибо, Мэтт

One Solution collect form web for “Как изменить порядок / группировку / уровень столбцов Pandas MultiIndex?”

Ваши столбцы – это MultiIndex. Вам нужно переназначить столбцы DataFrame новым MultiIndex, созданным из уровней замены существующего:

 df.columns = df.columns.swaplevel(0, 1) df.sortlevel(0, axis=1, inplace=True) >>> df month '1Jan' 'Feb' 'Mar' weight extent rank weight extent rank weight extent rank year 2000 45.1 13.442 13 46.1 14.94 17 25.1 15.02 14 2001 85.0 13.380 12 16.0 14.81 15 49.0 15.14 17 2002 90.0 13.590 15 33.0 15.13 22 82.0 14.88 10 2003 47.0 13.640 17 34.0 14.83 16 78.0 15.27 22 

Затем вы можете экспортировать в csv:

 df.to_csv(filename) 
  • Как получить первый столбец pandas DataFrame как серии?
  • Использование pandas для выбора строк с использованием двух разных столбцов из dataframe?
  • Запись GeoDataFrame в базу данных SQL
  • Как совместить две серии панд, которые по-разному индексируются?
  • получить предыдущее значение индекса pandas datetime
  • График Matplotlib - это не-шоу
  • Numpy «где» с несколькими условиями
  • Что такое эквивалент Python (numpy или scipy или Pandas) для функции adjboxStats R?
  • Преобразование больших csv в hdf5
  • Морской график рассеяния с отсутствующими точками на рисунке
  • Переместить заданную строку до конца DataFrame
  • Python - лучший язык программирования в мире.