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

Пройдите тест, узнайте какой профессии подходите

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

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

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

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

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

Кинга Идем в IT: пошаговый план для смены профессии

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

С выходом версии 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

Завершение

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