pandas.DataFrame.stack#

DataFrame.stack(level=-1, dropna=, sort=, future_stack=False)[источник]#

Переместить указанные уровни из столбцов в индекс.

Вернуть преобразованный DataFrame или Series с многоуровневым индексом, имеющим один или несколько новых внутренних уровней по сравнению с текущим DataFrame. Новые внутренние уровни создаются путем поворота столбцов текущего датафрейма:

  • если столбцы имеют один уровень, результат — Series;

  • если столбцы имеют несколько уровней, новый индексный уровень(и) берется из указанного уровня(ей) и результатом является DataFrame.

Параметры:
уровеньint, str, list, по умолчанию -1

Уровень(и) для укладки с оси столбцов на ось индекса, определенные как один индекс или метка, или список индексов или меток.

dropnabool, по умолчанию True

Удалять ли строки в результирующем Frame/Series с пропущенными значениями. Наложение уровня столбца на ось индекса может создавать комбинации значений индекса и столбца, отсутствующие в исходном DataFrame. См. раздел Примеры.

sortbool, по умолчанию True

Сортировать ли уровни результирующего MultiIndex.

future_stackbool, по умолчанию False

Использовать ли новую реализацию, которая заменит текущую реализацию в pandas 3.0. При значении True параметры dropna и sort не влияют на результат и должны оставаться неуказанными. См. Примечания к выпуску pandas 2.1.0 для получения дополнительной информации.

Возвращает:
DataFrame или Series

Сложенный фрейм данных или серия.

Смотрите также

DataFrame.unstack

Разверните указанные уровни из оси индекса на ось столбцов.

DataFrame.pivot

Преобразовать dataframe из длинного формата в широкий формат.

DataFrame.pivot_table

Создает сводную таблицу в стиле электронных таблиц как DataFrame.

Примечания

Функция названа по аналогии с коллекцией книг, которая реорганизуется из горизонтального расположения рядом (столбцы датафрейма) в вертикальную стопку друг на друге (в индексе датафрейма).

Ссылка руководство пользователя для дополнительных примеров.

Примеры

Одноуровневые столбцы

>>> df_single_level_cols = pd.DataFrame([[0, 1], [2, 3]],
...                                     index=['cat', 'dog'],
...                                     columns=['weight', 'height'])

Сложение DataFrame с одноуровневой осью столбцов возвращает Series:

>>> df_single_level_cols
     weight height
cat       0      1
dog       2      3
>>> df_single_level_cols.stack(future_stack=True)
cat  weight    0
     height    1
dog  weight    2
     height    3
dtype: int64

Многоуровневые столбцы: простой случай

>>> multicol1 = pd.MultiIndex.from_tuples([('weight', 'kg'),
...                                        ('weight', 'pounds')])
>>> df_multi_level_cols1 = pd.DataFrame([[1, 2], [2, 4]],
...                                     index=['cat', 'dog'],
...                                     columns=multicol1)

Стэкинг датафрейма с многоуровневой осью столбцов:

>>> df_multi_level_cols1
     weight
         kg    pounds
cat       1        2
dog       2        4
>>> df_multi_level_cols1.stack(future_stack=True)
            weight
cat kg           1
    pounds       2
dog kg           2
    pounds       4

Пропущенные значения

>>> multicol2 = pd.MultiIndex.from_tuples([('weight', 'kg'),
...                                        ('height', 'm')])
>>> df_multi_level_cols2 = pd.DataFrame([[1.0, 2.0], [3.0, 4.0]],
...                                     index=['cat', 'dog'],
...                                     columns=multicol2)

Часто возникают пропущенные значения при укладке dataframe с многоуровневыми столбцами, так как уложенный dataframe обычно имеет больше значений, чем исходный dataframe. Пропущенные значения заполняются NaN:

>>> df_multi_level_cols2
    weight height
        kg      m
cat    1.0    2.0
dog    3.0    4.0
>>> df_multi_level_cols2.stack(future_stack=True)
        weight  height
cat kg     1.0     NaN
    m      NaN     2.0
dog kg     3.0     NaN
    m      NaN     4.0

Указание уровня(ей) для стекирования

Первый параметр управляет тем, какой уровень или уровни складываются:

>>> df_multi_level_cols2.stack(0, future_stack=True)
             kg    m
cat weight  1.0  NaN
    height  NaN  2.0
dog weight  3.0  NaN
    height  NaN  4.0
>>> df_multi_level_cols2.stack([0, 1], future_stack=True)
cat  weight  kg    1.0
     height  m     2.0
dog  weight  kg    3.0
     height  m     4.0
dtype: float64