开发手册 欢迎您!
软件开发者资料库

Python pandas.DataFrame.stack函数方法的使用

Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。本文主要介绍一下Pandas中pandas.DataFrame.stack方法的使用。

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

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

返回一个经过重整的DataFrameSeries,与当前DataFrame相比,该DataFrameSeries具有一个或多个新的最内层的多层索引。通过旋转当前DataFrame的列来创建新的最内层:

1) 如果列具有单个级别,则输出为Series

2) 如果列具有多个级别,则新索引级别取自指定级别,并且输出为DataFrame

参数:

level int, str, list, 默认为 -1

从列轴堆叠到索引轴,定义为一个索引或标签,

或一列索引或标签。

dropna bool, 默认为 True

是否删除结果Frame/Series中缺少值的行。

将列级堆叠到索引轴上,

可以创建原始dataframe中缺少的索引和列值的组合。

看到部分例子。

返回值:

DataFrameSeries

Stacked dataframeseries.

Notes

该函数以类推的方式命名,其含义是将书籍的集合从水平位置(dataframe的列)并排排列成彼此垂直堆叠(在dataframe的索引中)。

例子


单级列

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

将数据框与单个级别的列轴堆叠会返回一个Series:

>>> df_single_level_cols     weight heightcat       0      1dog       2      3>>> df_single_level_cols.stack()cat  weight    0     height    1dog  weight    2     height    3dtype: 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    poundscat       1        2dog       2        4>>> df_multi_level_cols1.stack()            weightcat kg           1    pounds       2dog 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      mcat    1.0    2.0dog    3.0    4.0>>> df_multi_level_cols2.stack()        height  weightcat kg     NaN     1.0    m      2.0     NaNdog kg     NaN     3.0    m      4.0     NaN

规定要堆叠的水平


第一个参数控制要堆叠的一个或多个级别:

>>> df_multi_level_cols2.stack(0)             kg    mcat height  NaN  2.0    weight  1.0  NaNdog height  NaN  4.0    weight  3.0  NaN>>> df_multi_level_cols2.stack([0, 1])cat  height  m     2.0     weight  kg    1.0dog  height  m     4.0     weight  kg    3.0dtype: 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      mcat    NaN    1.0dog    2.0    3.0>>> df_multi_level_cols3.stack(dropna=False)        height  weightcat kg     NaN     NaN    m      1.0     NaNdog kg     NaN     2.0    m      3.0     NaN>>> df_multi_level_cols3.stack(dropna=True)        height  weightcat m      1.0     NaNdog kg     NaN     2.0    m      3.0     NaN