pandas.DataFrame.stack#
-
DataFrame.stack(level=-1, dropna=
, sort= , future_stack=False)[источник]# Переместить указанные уровни из столбцов в индекс.
Вернуть преобразованный DataFrame или Series с многоуровневым индексом, имеющим один или несколько новых внутренних уровней по сравнению с текущим DataFrame. Новые внутренние уровни создаются путем поворота столбцов текущего датафрейма:
если столбцы имеют один уровень, результат — Series;
если столбцы имеют несколько уровней, новый индексный уровень(и) берется из указанного уровня(ей) и результатом является DataFrame.
- Параметры:
- уровеньint, str, list, по умолчанию -1
Уровень(и) для укладки с оси столбцов на ось индекса, определенные как один индекс или метка, или список индексов или меток.
- dropnabool, по умолчанию True
Удалять ли строки в результирующем Frame/Series с пропущенными значениями. Наложение уровня столбца на ось индекса может создавать комбинации значений индекса и столбца, отсутствующие в исходном DataFrame. См. раздел Примеры.
- sortbool, по умолчанию True
Сортировать ли уровни результирующего MultiIndex.
- future_stackbool, по умолчанию False
Использовать ли новую реализацию, которая заменит текущую реализацию в pandas 3.0. При значении True параметры dropna и sort не влияют на результат и должны оставаться неуказанными. См. Примечания к выпуску pandas 2.1.0 для получения дополнительной информации.
- Возвращает:
- DataFrame или Series
Сложенный фрейм данных или серия.
Смотрите также
DataFrame.unstackРазверните указанные уровни из оси индекса на ось столбцов.
DataFrame.pivotПреобразовать dataframe из длинного формата в широкий формат.
DataFrame.pivot_tableСоздает сводную таблицу в стиле электронных таблиц как 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)
Стэкинг датафрейма с многоуровневой осью столбцов:
>>> 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 обычно имеет больше значений, чем исходный 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