В сложных наборах данных иногда требуется создавать иерархические структуры, и здесь на помощь приходит мультииндекс. Pandas предоставляет мощные инструменты для создания и работы с мультиуровневой индексацией, что позволяет создавать более гибкие и информативные структуры данных.
import pandas as pd
arrays = [['A', 'A', 'B', 'B'], [1, 2, 1, 2]]
index = pd.MultiIndex.from_arrays(arrays, names=('letters', 'numbers'))
print(index)
# MultiIndex([('A', 1),
# ('A', 2),
# ('B', 1),
# ('B', 2)],
# names=['letters', 'numbers'])
arrays = [['A', 'A', 'B', 'B'], [1, 2, 1, 2]]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=('letters', 'numbers'))
print(index)
# MultiIndex([('A', 1),
# ('A', 2),
# ('B', 1),
# ('B', 2)],
# names=['letters', 'numbers'])
Доступ к данным с мультииндексом может быть немного отличным:
Выбор данных по одному уровню:
df.loc['A']
Выбор данных по нескольким уровням:
df.loc[('A', 1)]
Для эффективной работы с мультииндексом рекомендуется его сортировать:
df.sort_index(inplace=True)
Переименование уровней:
df.index.rename(['new_name_1', 'new_name_2'], level=[0, 1], inplace=True)
Обмен уровней:
df.swaplevel(0, 1)
Если вам нужно преобразовать один из уровней мультииндекса обратно в столбец:
df.reset_index(level='numbers')
Используя метод xs
, вы можете выполнять более сложные запросы:
df.xs(key=1, level='numbers')
При работе с мультииндексами можно также выполнять операции слияния и соединения:
df1 = pd.DataFrame({'A': [1, 2]}, index=pd.MultiIndex.from_tuples([('A', 1), ('B', 2)], names=['letters', 'numbers']))
df2 = pd.DataFrame({'B': [3, 4]}, index=pd.MultiIndex.from_tuples([('A', 1), ('B', 3)], names=['letters', 'numbers']))
merged = pd.merge(df1, df2, left_index=True, right_index=True, how='outer')
Можно выполнять агрегацию на определенных уровнях мультииндекса:
df.groupby(level='letters').sum()
Мультииндекс может быть полезен при создании перекрестных таблиц:
pd.crosstab(df['A'], [df.index.get_level_values('letters'), df.index.get_level_values('numbers')])
Вы можете преобразовать уровни мультииндекса в столбцы и обратно с помощью stack
и unstack
:
df.unstack(level='numbers')
df.stack()
Мультииндексация в Pandas предоставляет инструменты для работы с иерархически организованными данными. Исходя из вашего опыта, возможно, потребуется время, чтобы освоиться с мультииндексацией, но стоит уделить этому внимание. Мультииндекс может значительно упростить и ускорить обработку сложных наборов данных.
Содержание: