Pandas 如何将层次化索引列展开

Pandas 如何将层次化索引列展开

在本文中,我们将介绍在Pandas中如何将层次化索引列展开。层次化索引,也称为多级索引,是指在一个轴上拥有多个索引级别的索引方式,常常在数据分析中使用。例如,在以下示例中,列名中有两个级别的索引:

           apples       oranges
           sale  price    sale  price
city                                
New York     10     1.0      15    0.5
Los Angeles  20     0.9      25    0.6

第一级索引为城市名称,第二级索引为水果类型、销量和价格。在有些情况下,我们需要展开或者重构此层次化结构,将多级索引转换为单级索引,这样更方便数据的处理和分析。

阅读更多:Pandas 教程

使用reset_index方法

Pandas提供了reset_index方法,可以将一个或多个层次化的列索引转换为行索引,这样就可以将层次化索引列展开为单级列。下面是示例代码:

import pandas as pd

data = {'city': ['New York', 'Los Angeles', 'Chicago', 'Houston'],
        'apples_sale': [10, 20, 30, 15],
        'apples_price': [1.0, 0.9, 0.8, 0.7],
        'oranges_sale': [15, 25, 35, 20],
        'oranges_price': [0.5, 0.6, 0.7, 0.8]}

df = pd.DataFrame(data)
df.set_index('city', inplace=True)

print(df)

# 展开层次化索引列为单级列
df_flat = df.reset_index()
print(df_flat)

执行结果如下:

             apples_sale  apples_price  oranges_sale  oranges_price
city                                                                
New York              10           1.0            15            0.5
Los Angeles           20           0.9            25            0.6
Chicago               30           0.8            35            0.7
Houston               15           0.7            20            0.8

         city  apples_sale  apples_price  oranges_sale  oranges_price
0    New York           10           1.0            15            0.5
1  Los Angeles           20           0.9            25            0.6
2      Chicago           30           0.8            35            0.7
3      Houston           15           0.7            20            0.8

通过reset_index方法,将city列的层次化索引转换为单级列。注意在示例代码中,我们首先将city列设置为索引列,然后执行reset_index方法,展开层次化索引列为单级列。

使用stack方法

在某些情况下,我们需要将多个层次化索引列同时展开为单级列。此时,可以使用stack方法,它将列中的层次化索引压缩为单个级别,将列名转换为行中的最内层级别。下面是示例代码:

import pandas as pd

data = {'city': ['New York', 'Los Angeles', 'Chicago', 'Houston'],
        'apples_sale': [10, 20, 30, 15],
        'apples_price': [1.0, 0.9, 0.8, 0.7],
        'oranges_sale': [15, 25, 35, 20],
        'oranges_price': [0.5, 0.6, 0.7, 0.8]}

df = pd.DataFrame(data)
df.set_index('city', inplace=True)

print(df)

# 将层次化索引列展开为单级列
df_flat = df.stack(level=0).reset_index(level=1)
df_flat.columns = ['fruit', 'sale', 'price']
df_flat.reset_index(inplace=True)
print(df_flat)

执行结果如下:

             apples_sale  apples_price  oranges_sale  oranges_price
city                                                                
New York              10           1.0            15            0.5
Los Angeles           20           0.9            25            0.6
Chicago               30           0.8            35            0.7
Houston               15           0.7            20            0.8

   city     fruit  sale  price
0     0    apples    10    1.0
1     0  oranges    15    0.5
2     1    apples    20    0.9
3     1  oranges    25    0.6
4     2    apples    30    0.8
5     2  oranges    35    0.7
6     3    apples    15    0.7
7     3  oranges    20    0.8

通过stack方法,将列中的层次化索引压缩为单个级别,并将列名转换为行中最内层的级别,然后使用reset_index方法将索引列转换为单级列。需要注意的是,使用stack方法压缩层次化索引列后,会形成多层索引,需要使用reset_index方法将索引列转换为普通列,使用rename方法将列名重命名为合适的名称。

总结

本文介绍了在Pandas中如何将层次化索引列展开为单级列。我们可以使用reset_index方法将单个层次化结构的列将转换为单级列;也可以使用stack方法将多个层次化结构的列压缩为单个级别,然后使用reset_index方法将多级索引转换为单级列。这些方法可以极大地简化数据的处理和分析,提高数据分析的效率。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程