Spec-Zone.ru › pandas 1

pandas.DataFrame.stack

DataFrame.stack(level=- 1, dropna=True)[source]

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

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

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

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

Parameters
level:int, str, список, по умолчанию -1

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

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

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

Returns
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()
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()
            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. Отсутствующие значения заполняются NaNs:

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

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

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

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

Удаление отсутствующих значений

>>> df_multi_level_cols3 = pd.DataFrame([[None, 1.0], [2.0, 3.0]],
...                                     index=['cat', 'dog'],
...                                     columns=multicol2)

Обратите внимание, что строки, где все значения отсутствуют, по умолчанию удаляются, но это поведение можно контролировать с помощью ключевого параметра dropna:

>>> df_multi_level_cols3
    weight height
        kg      m
cat    NaN    1.0
dog    2.0    3.0
>>> df_multi_level_cols3.stack(dropna=False)
        height  weight
cat kg     NaN     NaN
    m      1.0     NaN
dog kg     NaN     2.0
    m      3.0     NaN
>>> df_multi_level_cols3.stack(dropna=True)
        height  weight
cat m      1.0     NaN
dog kg     NaN     2.0
    m      3.0     NaN

© 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/1.5.0/reference/api/pandas.DataFrame.stack.html

Spec-Zone.ru

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