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

堆叠具有多级列轴的数据框:

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

堆叠具有多级列的数据帧时,通常会缺少值,因为堆叠的数据帧通常具有比原始数据帧更多的值。缺失值填充有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

推荐阅读
cjavapy编程之路首页