Spec-Zone.ru › pandas 2

pandas.DataFrame.stack

DataFrame.stack(level=-1, dropna=_NoDefault.no_default, sort=_NoDefault.no_default, future_stack=False)[source]

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

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

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

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

Параметры:
level:int, str, список, по умолчанию -1

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

dropna:bool, по умолчанию True

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

sort:bool, по умолчанию True

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

future_stack:bool, по умолчанию False

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

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

Уложенная DataFrame или Series.

См. также

DataFrame.unstack

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

DataFrame.pivot

Изменение формата DataFrame из длинного в широкий.

DataFrame.pivot_table

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

Примечания

Функция названа по аналогии с переупаковкой коллекции книг — с расположения их рядом (горизонтальное расположение, столбцы DataFrame) до вертикального расположения друг на друге (в индексе 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)

Укладка DataFrame со столбцами с несколькими уровнями:

>>> 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 обычно содержит больше значений, чем исходная. Пропущенные значения заполняются 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

© 2008–2022, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/2.2.2/reference/api/pandas.DataFrame.stack.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API