Удаление уровня из многоуровневого индекса в Pandas

Пройдите тест, узнайте какой профессии подходите
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам необходимо исключить определённый уровень из DataFrame с многосоставными колонками в pandas, примените метод droplevel() напрямую к объекту столбцов:

Python
Скопировать код
df.columns = df.columns.droplevel(0)  # замените 0 на номер уровня, который хотите убрать

Таким образом, вы сможете удалить самый внешний уровень, если таковых несколько. Для удаления другого уровня достаточно изменить его порядковый номер.

Пошаговый план для смены профессии

Конечная цель: Удаление уровня колонки

С выходом версии pandas 0.24.0, стал доступен метод DataFrame.droplevel(). Если вы предпочитаете функциональный подход в программировании, выбор этого метода будет для вас наиболее удобным:

Python
Скопировать код
df = df.droplevel(0, axis=1)

Сборка 'Мстителей': Объединение уровней

Устранить избыточные уровни можно с помощью функции суммирования sum(), применённой к нашему DataFrame. Функция агрегации объединит данные по указанному уровню, таким образом исключая его из структуры.

Python
Скопировать код
df = df.sum(level=1, axis=1)

Дефинирующий удар: Метод .xs

Если вам требуется более контролируемый процесс удаления уровней, воспользуйтесь методом .xs.

Python
Скопировать код
df = df.xs('Key_Level', axis=1, drop_level=True)

Визуализация

Рассмотрим многоуровневую структуру как шкаф с файлами, разбитыми на ящики:

Markdown
Скопировать код
🗂 Верхний ящик (Уровень 0): 'Предмет'
🗂 Средний ящик (Уровень 1): 'Глава'
🗂 Нижний ящик (Уровень 2): 'Тема'

Удаление уровня поможет нам упростить эту систему организации данных.

Python
Скопировать код
df.columns = df.columns.droplevel(1)

И теперь мы получаем оптимизированную структуру:

Markdown
Скопировать код
🗂 Переработанный ящик: 'Предмет'  |  'Тема'

Как создавать многоуровневые индексы

Метод pd.MultiIndex.from_tuples() возможно использовать для создания многоуровневых индексов.

Python
Скопировать код
tuples = [('a', 'b'), ('a', 'c')]
df.columns = pd.MultiIndex.from_tuples(tuples)

Цепочки методов для более эффективного кода

Фраза «меньше значит больше» отлично передаёт суть использования цепочек методов в pandas:

Python
Скопировать код
df = (df.set_index('Key_Column')
        .droplevel(0, axis=1)
        .reset_index())

Перестройка структуры колонок

Для изменения индексов колонок используйте метод get_level_values():

Python
Скопировать код
new_columns = df.columns.get_level_values(1)
df.columns = new_columns

Полезные материалы

  1. Документация pandas 2.2.0 – Многоуровневые индексы / Продвинутое индексирование
  2. Документация pandas 2.2.0 – pandas.DataFrame.droplevel
  3. Создание DataFrame в Pandas из списков и словарей – Practical Business Python
  4. Python | Pandas MultiIndex.droplevel() – GeeksforGeeks
  5. Как использовать MultiIndex в pandas? – YouTube
  6. Методы использования продвинутого индексирования и многоуровневых индексов в Pandas

Завершение

Углубление ваших знаний — путь к пониманию. Не прекращайте практиковать и, если этот ответ был полезен, не забудьте его отметить. Удачи в программировании! 👩‍💻

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод используется для удаления уровня из многоуровневого индекса в Pandas?
1 / 5