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