详解pandas.DataFrame.stack()(将数据框堆叠为序列)函数使用方法

  • Post category:Python

pandas.DataFrame.stack()是Pandas库中的一个方法,它可以将DataFrame中的列“旋转”为行,将多列变成一列。具体来说,stack()方法能够将DataFrame从“宽格式”(wide format)转换为“长格式”(long format)。

下面详细讲解一下pandas.DataFrame.stack()方法的作用和使用方法:

作用

pandas.DataFrame.stack()方法的作用是将DataFrame中的多列转换成一列。具体而言,它将DataFrame的列索引“压缩”到行索引中,得到了一个Series对象。

使用方法

pandas.DataFrame.stack()方法的语法如下:

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

参数解释:

  • level:默认值为-1,表示所有层级都被压缩成一个Series,如果指定了level参数,则只有level中指定的层级会被压缩成Series

  • dropna:用于控制是否删除缺失值,如果将该参数设置为True,则会删除所有包含缺失值的行,如果将该参数设置为False,则会保留缺失值

下面通过两个实例来解释pandas.DataFrame.stack()方法的使用方法:

实例1

import pandas as pd

df = pd.DataFrame({'A': ['a', 'b', 'c'], 'B': [1, 2, 3], 'C': [4, 5, 6]})

stacked = df.stack()

print(stacked)

输出结果为:

0  A    a
   B    1
   C    4
1  A    b
   B    2
   C    5
2  A    c
   B    3
   C    6
dtype: object

在这个例子中,我们首先创建了一个DataFrame对象,包含了3个列A、B、C。然后调用stack()方法,将df转换成了一个Series对象。可以看到,Series的索引有两个级别(MultiIndex)。第一个级别是原来的行索引,第二个级别是原来的列索引。

实例2

import pandas as pd

df = pd.read_csv('data.csv')

stacked = df.set_index(['date', 'location']).stack()

print(stacked)

在这个例子中,我们首先从一个CSV文件中读取了数据,并将“date”和“location”两列作为索引。然后使用stack()方法,将df转换成了一个Series对象。可以看到,Series的索引有三个级别(MultiIndex)。第一个级别是原来的“date”列,第二个级别是原来的“location”列,第三个级别是原来的列索引。