Spec-Zone.ru › pandas 0.24

pandas.DataFrame.stack

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

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

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

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

Новые уровни индекса отсортированы.

Параметры:
level : int, str, list, default -1

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

dropna : bool, default True

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

Возвращает:
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–2012, 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/0.24.2/reference/api/pandas.DataFrame.stack.html

Spec-Zone.ru

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