Часто при работе с библиотекой 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()
.
Добавить комментарий