07 Июл 2023
2 мин
98

Решение проблемы иерархического индекса в Python на примере pandas

Часто при работе с библиотекой pandas в Python возникает ситуация, когда в результате выполнения операции groupby.agg получается DataFrame с иерархическим индексом.

Содержание

Часто при работе с библиотекой pandas в Python возникает ситуация, когда в результате выполнения операции groupby.agg получается DataFrame с иерархическим индексом. Такой индекс может быть в строках или столбцах, и его уровни обычно разделяются запятыми. Вот пример такого DataFrame:

     USAF   WBAN  year  month  day  s_PC  s_CL  s_CD  s_CNT  tempf       
                                     sum   sum   sum    sum   amax   amin
0  702730  26451  1993      1    1     1     0    12     13  30.92  24.98
1  702730  26451  1993      1    2     0     0    13     13  32.00  24.98
2  702730  26451  1993      1    3     1    10     2     13  23.00   6.98
3  702730  26451  1993      1    4     1     0    12     13  10.04   3.92
4  702730  26451  1993      1    5     3     0    10     13  19.94  10.94

Иногда бывает необходимо преобразовать этот иерархический индекс в обычный «плоский» индекс, чтобы упростить работу с данными. В данном случае требуется получить такой DataFrame:

     USAF   WBAN  year  month  day  s_PC  s_CL  s_CD  s_CNT  tempf_amax  tmpf_amin   
0  702730  26451  1993      1    1     1     0    12     13  30.92          24.98
1  702730  26451  1993      1    2     0     0    13     13  32.00          24.98
2  702730  26451  1993      1    3     1    10     2     13  23.00          6.98
3  702730  26451  1993      1    4     1     0    12     13  10.04          3.92
4  702730  26451  1993      1    5     3     0    10     13  19.94          10.94

Эту задачу можно решить с помощью метода reset_index() библиотеки pandas. Этот метод убирает все уровни иерархического индекса и возвращает обычный DataFrame. Важно помнить, что метод reset_index() не изменяет исходный DataFrame, а возвращает новый.

flat_df = df.reset_index()

Однако, если в DataFrame есть колонки с мультииндексом, то после выполнения этой команды в названиях колонок появятся кортежи. Чтобы избежать этого, можно использовать метод map() для изменения названий колонок. Вот пример кода, который выполняет это преобразование:

df.columns = df.columns.map('_'.join)

Таким образом, проблема иерархического индекса в pandas может быть решена с помощью комбинации методов reset_index() и map().

Содержание

Добавить комментарий

Определи профессию по рисунку
Пройдите тест, узнайте какой профессии подходитеНачать тест
+