pandas.DataFrame.stack #

数据框。stack ( level = -1 , dropna = _NoDefault.no_default , sort = _NoDefault.no_default , future_stack = False ) [来源] #

将指定级别从列堆叠到索引。

返回一个重塑的 DataFrame 或 Series,该 DataFrame 或 Series 具有多级索引,与当前 DataFrame 相比,具有一个或多个新的最内层。新的最内层是通过旋转当前数据帧的列来创建的:

  • 如果列只有一个级别,则输出是一个系列;

  • 如果列有多个级别,则新的索引级别将从规定的级别中获取,并且输出是 DataFrame。

参数
level int、str、list,默认-1

从列轴堆叠到索引轴的级别,定义为一个索引或标签,或者一系列索引或标签。

dropna bool,默认 True

是否删除生成的框架/系列中缺少值的行。将列级别堆叠到索引轴上可以创建原始数据帧中缺少的索引和列值的组合。请参阅示例部分。

排序bool,默认 True

是否对生成的 MultiIndex 的级别进行排序。

future_stack bool, 默认 False

是否使用新的实现来替换 pandas 3.0 中的当前实现。当 True 时,dropna 和 sort 对结果没有影响,必须保持未指定。有关更多详细信息,请参阅pandas 2.1.0 发行说明。

返回
数据框或系列

堆叠数据框或系列。

也可以看看

DataFrame.unstack

将指定级别从索引轴取消堆叠到列轴上。

DataFrame.pivot

将数据帧从长格式重塑为宽格式。

DataFrame.pivot_table

创建电子表格样式的数据透视表作为 DataFrame。

笔记

该函数的命名类似于一系列书籍被重新组织,从水平位置上并排(数据框的列)到垂直堆叠在彼此之上(在数据框的索引中)。

请参阅用户指南以获取更多示例。

例子

单级列

>>> df_single_level_cols = pd.DataFrame([[0, 1], [2, 3]],
...                                     index=['cat', 'dog'],
...                                     columns=['weight', 'height'])

使用单级列轴堆叠数据框会返回一个系列:

>>> 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)

将数据帧与多层列堆叠时,通常会出现缺失值,因为堆叠的数据帧通常比原始数据帧具有更多的值。缺失值用 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