Метод stack
Метод stack применяется к DataFrame
и преобразует указанные столбцы в строки, добавляя
новый уровень в индекс. По умолчанию метод сворачивает
все столбцы, превращая таблицу в более длинный формат.
Первый параметр level позволяет указать,
какой уровень мультииндекса столбцов следует преобразовать.
Если параметр не указан, сворачиваются все столбцы.
Метод особенно полезен для работы с многомерными данными,
когда нужно перейти от широкого формата к длинному.
Результатом работы метода является Series
или DataFrame с мультииндексом.
Синтаксис
df.stack([level], [dropna=True])
Параметры метода stack:
-
level- уровень мультииндекса столбцов для преобразования (по умолчанию все столбцы); -
dropna- удалять ли строки с пропусками в результирующем объекте (по умолчанию True).
Пример
Давайте преобразуем столбцы таблицы в дополнительный уровень индекса:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3],
'b': [4, 5, 6]
})
res = df.stack()
print(res)
Результат выполнения кода:
0 a 1
b 4
1 a 2
b 5
2 a 3
b 6
dtype: int64
Пример
Давайте применим метод с параметром dropna
для управления пропусками в данных:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, None],
'b': [4, None, 6]
})
res = df.stack(dropna=False)
print(res)
Результат выполнения кода:
0 a 1.0
b 4.0
1 a 2.0
b NaN
2 a NaN
b 6.0
dtype: float64
Если установить dropna в False,
в результате сохранятся строки с пропусками.
Пример
Давайте применим метод к таблице с мультииндексом в столбцах, указав уровень для преобразования:
import pandas as pd
columns = pd.MultiIndex.from_tuples([
('x', 'a'), ('x', 'b'),
('y', 'a'), ('y', 'b')
])
df = pd.DataFrame([[1, 2, 3, 4]], columns=columns)
res = df.stack(level=0)
print(res)
Результат выполнения кода:
x y
0 a 1 3
b 2 4
В результате первый уровень мультииндекса стал дополнительным индексом строк.
Пример
Давайте используем метод stack в связке
с методом unstack для изменения структуры данных:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
stacked = df.stack()
unstacked = stacked.unstack()
print(unstacked)
Результат выполнения кода:
a b
0 1 10
1 2 20
2 3 30
3 4 40
4 5 50
Методы stack и unstack являются
обратными друг другу для таблиц без пропусков.
Смотрите также
-
метод
unstack,
который выполняет обратное преобразование -
метод
melt,
который также преобразует столбцы в строки -
метод
pivot,
который изменяет структуру таблицы -
метод
pivot_table,
который создает сводную таблицу с агрегацией