Удаление уровня из многоуровневого индекса в Pandas
Быстрый ответ
Если вам необходимо исключить определённый уровень из DataFrame с многосоставными колонками в pandas, примените метод droplevel()
напрямую к объекту столбцов:
df.columns = df.columns.droplevel(0) # замените 0 на номер уровня, который хотите убрать
Таким образом, вы сможете удалить самый внешний уровень, если таковых несколько. Для удаления другого уровня достаточно изменить его порядковый номер.
[AsideBanner]
Конечная цель: Удаление уровня колонки
С выходом версии pandas 0.24.0, стал доступен метод DataFrame.droplevel()
. Если вы предпочитаете функциональный подход в программировании, выбор этого метода будет для вас наиболее удобным:
df = df.droplevel(0, axis=1)
Сборка 'Мстителей': Объединение уровней
Устранить избыточные уровни можно с помощью функции суммирования sum()
, применённой к нашему DataFrame. Функция агрегации объединит данные по указанному уровню, таким образом исключая его из структуры.
df = df.sum(level=1, axis=1)
Дефинирующий удар: Метод .xs
Если вам требуется более контролируемый процесс удаления уровней, воспользуйтесь методом .xs
.
df = df.xs('Key_Level', axis=1, drop_level=True)
Визуализация
Рассмотрим многоуровневую структуру как шкаф с файлами, разбитыми на ящики:
🗂 Верхний ящик (Уровень 0): 'Предмет'
🗂 Средний ящик (Уровень 1): 'Глава'
🗂 Нижний ящик (Уровень 2): 'Тема'
Удаление уровня поможет нам упростить эту систему организации данных.
df.columns = df.columns.droplevel(1)
И теперь мы получаем оптимизированную структуру:
🗂 Переработанный ящик: 'Предмет' | 'Тема'
Как создавать многоуровневые индексы
Метод pd.MultiIndex.from_tuples()
возможно использовать для создания многоуровневых индексов.
tuples = [('a', 'b'), ('a', 'c')]
df.columns = pd.MultiIndex.from_tuples(tuples)
Цепочки методов для более эффективного кода
Фраза «меньше значит больше» отлично передаёт суть использования цепочек методов в pandas:
df = (df.set_index('Key_Column')
.droplevel(0, axis=1)
.reset_index())
Перестройка структуры колонок
Для изменения индексов колонок используйте метод get_level_values()
:
new_columns = df.columns.get_level_values(1)
df.columns = new_columns
Полезные материалы
- Документация pandas 2.2.0 – Многоуровневые индексы / Продвинутое индексирование
- Документация pandas 2.2.0 – pandas.DataFrame.droplevel
- Создание DataFrame в Pandas из списков и словарей – Practical Business Python
- Python | Pandas MultiIndex.droplevel() – GeeksforGeeks
- Как использовать MultiIndex в pandas? – YouTube
- Методы использования продвинутого индексирования и многоуровневых индексов в Pandas
Завершение
Углубление ваших знаний — путь к пониманию. Не прекращайте практиковать и, если этот ответ был полезен, не забудьте его отметить. Удачи в программировании! 👩💻