Python – Pandas DataFrame中的多级列堆叠

Python – Pandas DataFrame中的多级列堆叠

在Pandas数据分析库中,DataFrame是一个二维数据结构,可以看做是多个Series对象排列而成的矩阵,而Series对象则类似于Excel表中的一列。 DataFrame 可以处理多种类型的数据(数值、字符串、日期等),可以用于数据清洗、处理和分析等场景。在某些情况下,我们需要对DataFrame的列进行堆叠(stack)操作,即将多级列索引的列转化为单层列索引的列。本篇文章将详细介绍如何在Pandas DataFrame中进行多级列的堆叠操作。

堆叠的概念及用处

在Pandas DataFrame中,每一列都有一个列名,有些时候,我们可以使用多级列索引的方式,使用元组或列表来命名列名。例如以下代码:

import pandas as pd

data = {'key1': {'A': 1, 'B': 2}, 'key2': {'A': 3, 'B': 4}}
df = pd.DataFrame(data)
df.columns = [['Group1', 'Group2'], ['A', 'B']]
print(df)

输出结果如下:

     Group1 Group2  
          A      B  
key1      1      2  
key2      3      4  

在上述代码中,我们使用了多级列索引的方式,将两个Group组织(即一级索引)下的A与B组织(即二级索引)放到了一起,用于表示DataFrame中列的排列。这种方式在那些需要处理多维度数据的场景中非常实用,可以让我们在 DataFrame 中轻松地表达多维数据,同时,在进行堆叠操作时,也能根据层级制定操作方式。

如果我们需要展示Group1的A列与Group2的B列,以及Group2的A列与Group1的B列,那么这时候就需要将多级列进行堆叠操作。

stacked_df = df.stack()
print(stacked_df)

输出结果如下:

          Group1  Group2
key1 A        1.0     NaN
     B        NaN     2.0
key2 A        3.0     NaN
     B        NaN     4.0

在以上代码中,我们通过stack()方法,将多级列索引的列转化为单层列索引的列,并且将列名进行了堆叠,Group1与Group2成为了列索引中的一级索引,而A和B成为了列索引中的二级索引。

堆叠的参数设置

除了默认行为,我们还可以使用 stack() 方法来选择不同的参数,以满足不同交叉表展示需求。 stack() 方法具有可选的参数 level,它定义了在哪一个列级别上进行堆叠操作,从而使得堆叠不仅仅是在最底层索引上执行。

例如,我们可以在堆叠时选择第一级别列索引 (Group1, Group2),而不是第二级别列索引 (A, B)。

stacked_df = df.stack(level=0)
print(stacked_df)

输出结果如下:

            A    B
key1 Group1  1.0  NaN
     Group2  NaN  2.0
key2 Group1  3.0  NaN
     Group2  NaN  4.0

在这种情况下,我们可以看到Group1和Group2还是作为列名的一级索引。由于我们明确了level=0,这使得我们沿着第一级别列索引(即 Group1 和 Group2 组合)堆叠,即每列组合。

还可以指定在堆叠后列名的名称,这可以通过给 stack() 方法传递参数 name 来实现。例如,我们可以将堆叠后的列名设置为 Values:

stacked_df = df.stack().rename_axis(['key', 'Values'])
print(stacked_df)

输出结果如下:

           Group1  Group2
key  Values              
key1 A         1.0     NaN
     B         NaN     2.0
key2 A         3.0     NaN
     B         NaN     4.0

在上面的输出中,我们可以看到列名已经由原来的一级和二级索引变成了“key”和“Values”,这样使得数据更容易阅读和理解。

堆叠操作的逆操作

在某些情况下,我们需要对经过堆叠后的DataFrame进行逆操作(即取消堆叠,还原成原有的多级列索引)。 取消堆叠操作可以使用 unstack() 方法实现。

与 stack() 方法类似,unstack() 方法的默认行为是将仅仅在最底层的列索引上进行转置。如果需要对别的层级进行逆操作,可以指定对应的列索引级别。

例如,以下代码将针对第一级别的列索引进行逆转:

unstacked_df = stacked_df.unstack(level=0)
print(unstacked_df)

输出结果如下:

       Group1     Group2    
key        key1 key2  key1 key2
Values                        
A          1.0  3.0   NaN  NaN
B          2.0  NaN   4.0  NaN

由于我们指定了 level=0,这使得我们沿着第一级别列索引,即 Group1 和 Group2 组合进行反转,即转换回多级列索引形式。

结论

在 Pandas DataFrame 中,将多级列进行堆叠的操作可以使得数据得到更好的展示和处理,同时用于多维数据展示的时候效果尤佳。 堆叠的逆操作可以使用 unstack() 方法实现,这样可以让数据重新还原成原有的多级列索引形式。在进行堆叠操作时,可以指定堆叠的级别和对应的列名,这样可以使得数据更易于理解和分析。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程