Класс MultiIndex
Класс MultiIndex применяется в Pandas
для создания иерархических индексов, которые
позволяют работать с многомерными данными.
MultiIndex может быть создан из кортежей,
массивов, произведения множеств или других
структур данных. Уровни индекса имеют свои
имена и коды, а также количество уровней
доступно через атрибуты.
Создание MultiIndex из массивов
Создадим многоуровневый индекс из двух массивов:
import pandas as pd
arrays = [
[1, 1, 2, 2, 3, 3],
['a', 'b', 'a', 'b', 'a', 'b']
]
index = pd.MultiIndex.from_arrays(arrays)
print(index)
Результат выполнения кода:
MultiIndex([(1, 'a'),
(1, 'b'),
(2, 'a'),
(2, 'b'),
(3, 'a'),
(3, 'b')],
)
Создание MultiIndex из кортежей
Создадим индекс из списка кортежей:
import pandas as pd
tuples = [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
index = pd.MultiIndex.from_tuples(tuples)
print(index)
Результат выполнения кода:
MultiIndex([(1, 'a'),
(1, 'b'),
(2, 'a'),
(2, 'b')],
)
Создание MultiIndex через произведение
Используем метод from_product для
создания декартова произведения множеств:
import pandas as pd
index = pd.MultiIndex.from_product(
[[1, 2, 3], ['a', 'b']]
)
print(index)
Результат выполнения кода:
MultiIndex([(1, 'a'),
(1, 'b'),
(2, 'a'),
(2, 'b'),
(3, 'a'),
(3, 'b')],
)
Создание DataFrame с MultiIndex
Создадим таблицу с многоуровневым индексом:
import pandas as pd
arrays = [
[1, 1, 2, 2],
['a', 'b', 'a', 'b']
]
index = pd.MultiIndex.from_arrays(arrays)
df = pd.DataFrame(
{'a': [10, 20, 30, 40], 'b': [100, 200, 300, 400]},
index=index
)
print(df)
Результат выполнения кода:
a b
1 a 10 100
b 20 200
2 a 30 300
b 40 400
Получение уровней индекса
Получим значения уровня 0 с помощью
метода get_level_values:
import pandas as pd
arrays = [
[1, 1, 2, 2],
['a', 'b', 'a', 'b']
]
index = pd.MultiIndex.from_arrays(arrays)
values = index.get_level_values(0)
print(values)
Результат выполнения кода:
Index([1, 1, 2, 2], dtype='int64')
Удаление уровня индекса
Удалим уровень 1 с помощью метода
droplevel:
import pandas as pd
arrays = [
[1, 1, 2, 2],
['a', 'b', 'a', 'b']
]
index = pd.MultiIndex.from_arrays(arrays)
df = pd.DataFrame(
{'a': [10, 20, 30, 40]},
index=index
)
print(df.droplevel(1))
Результат выполнения кода:
a
1 10
1 20
2 30
2 40
Перестановка уровней
Поменяем уровни местами методом swaplevel:
import pandas as pd
arrays = [
[1, 1, 2, 2],
['a', 'b', 'a', 'b']
]
index = pd.MultiIndex.from_arrays(arrays)
df = pd.DataFrame(
{'a': [10, 20, 30, 40]},
index=index
)
print(df.swaplevel(0, 1))
Результат выполнения кода:
a
a 1 10
b 1 20
a 2 30
b 2 40
Атрибуты MultiIndex
Получим количество уровней с помощью атрибута
nlevels:
import pandas as pd
arrays = [
[1, 1, 2, 2],
['a', 'b', 'a', 'b'],
['x', 'y', 'x', 'y']
]
index = pd.MultiIndex.from_arrays(arrays)
print(index.nlevels)
Результат выполнения кода:
3
Смотрите также
-
метод
from_arrays,
который создаёт MultiIndex из массивов -
метод
from_tuples,
который создаёт MultiIndex из кортежей -
метод
from_product,
который создаёт MultiIndex из произведения множеств -
метод
swaplevel,
который меняет местами уровни индекса