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