当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python pandas.DataFrame.stack用法及代码示例


用法:

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

将列中的规定级别堆叠到索引。

返回与当前 DataFrame 相比具有一个或多个新的 inner-most 级别的 multi-level 索引的重塑 DataFrame 或 Series。新的inner-most 级别是通过旋转当前 DataFrame 的列来创建的:

  • if the columns have a single level, the output is a Series;

  • if the columns have multiple levels, the new index level(s) is (are) taken from the prescribed level(s) and the output is a DataFrame.

参数

levelint, str, list, 默认 -1

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

dropna布尔值,默认为真

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

返回

DataFrame 或系列

堆叠的 DataFrame 或系列。

注意

该函数的命名类似于将书籍集合从水平位置并排( DataFrame 的列)重新组织到彼此垂直堆叠(在 DataFrame 的索引中)。

有关更多示例,请参阅用户指南。

例子

单层柱

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

用单层列轴堆叠 DataFrame 会返回一个系列:

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

使用 multi-level 列轴堆叠 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)

在使用multi-level 列堆叠数据帧时,通常会出现缺失值,因为堆叠的数据帧通常比原始数据帧具有更多的值。缺失值用 NaN 填充:

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

相关用法


注:本文由纯净天空筛选整理自pandas.pydata.org大神的英文原创作品 pandas.DataFrame.stack。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。