Pandas 在多层索引中重命名列名

Pandas 在多层索引中重命名列名

在本文中,我们将介绍如何在 Pandas 中的多层索引中重命名列名。PandasPython 数据科学中的重要工具,特别适合数据清理和数据分析任务。多层索引是 Pandas 的一个强大功能,可以帮助我们处理层级化数据,但是其列名常常非常复杂,需要进行重命名以便我们更好的处理。

阅读更多:Pandas 教程

创建多层索引数据框

我们首先需要创建一个多层索引的数据框,以便我们演示如何重命名列名。下面我们创建一个由多个州的人口、GDP、财政收入组成的数据框:

import pandas as pd

# 创建多层索引数据框
data = {"population": [100, 200, 300, 400],
        "GDP": [1000, 2000, 3000, 4000],
        "revenue": [500, 600, 700, 800]}
index = pd.MultiIndex.from_tuples([('California', 2010), ('California', 2020), 
                                   ('New York', 2010), ('New York', 2020)], 
                                  names=['State', 'Year'])
df = pd.DataFrame(data=data, index=index)
df
Python

输出结果如下:

                 population   GDP  revenue
State      Year                           
California 2010         100  1000      500
           2020         200  2000      600
New York   2010         300  3000      700
           2020         400  4000      800
Python

我们可以看到,这个数据框由两个层级组成,第一层级是州名,第二层级是年份。每个州包含三个列:人口、GDP 和财政收入。

重命名多层索引的列名

如果我们想精简这个数据框的列名,需要重命名多层索引的列名。我们可以使用 rename 方法来完成这个任务。我们需要传入一个列名字典,指定每一个需要重命名的列名,比如:

# 重命名多层索引的列名
new_columns = {"population": "Pop", "GDP": "Output", "revenue": "Rev"}
df = df.rename(columns=new_columns, level=0)
df
Python

输出结果如下:

                Pop  Output  Rev
State      Year                
California 2010  100    1000  500
           2020  200    2000  600
New York   2010  300    3000  700
           2020  400    4000  800
Python

我们可以看到,这个数据框现在的列名更加简短:Pop 表示人口,Output 表示 GDP,Rev 表示财政收入。我们通过一个名字字典来重命名每一个所需的列名。这个字典的键是旧列名,值是新列名。另外我们还需要指定重命名的层级,由于我们需要修改第一层级的列名,所以需要将 level 参数设置为 0。

如果我们还需要更改第二层级的列名,我们可以传入一个字典,如:

# 重命名多层索引的列名,第二层级
new_columns2 = {2010: 10, 2020: 20}
df = df.rename(columns=new_columns2, level=1)
df
Python

输出结果如下:

                Pop  Output  Rev
State      Year                
California 10    100    1000  500
           20    200    2000  600
New York   10    300    3000  700
           20    400    4000  800
Python

在这里,我们遵循了相同的模式,并将第二层级的列名从 2010 和 2020 分别改为了 10 和 20。

使用方法链重命名多层索引的列名

除了 rename 方法之外,Pandas 还提供了许多其他方法来重命名列名。我们可以使用方法链将多个操作链接起来,从而更加简洁和易于阅读。比如,我们可以使用 set_axis 方法来设置多层索引的列名,如下所示:

# 方法链重命名多层索引的列名
df = (df.set_axis(['Pop2', 'Output2', 'Rev2'], axis='columns')
        .rename(index=str, columns={'Pop2': 'Pop', 'Output2': 'Output', 'Rev2': 'Rev'})
        .rename(index=str, columns={'2010': '10', '2020': '20'}))
df
Python

输出结果如下:

                Pop  Output  Rev
State      Year                
California 10    100    1000  500
           20    200    2000  600
New York   10    300    3000  700
           20    400    4000  800
Python

我们可以看到,我们使用了三个方法来重命名多层索引的列名。首先,我们使用了 set_axis 方法来将列名分别改为 ‘Pop2’、’Output2’ 和 ‘Rev2’。然后,我们使用了 rename 方法来将新列名映射回原始的列名。最后,我们使用了另一个 rename 方法来将 ‘2010’ 和 ‘2020’ 重命名为 ’10’ 和 ’20’。

注意,在这个方法链中,set_axisrename 方法的顺序不影响结果。这个顺序只是为了让代码更加易于阅读和理解。

总结

在本文中,我们介绍了如何在 Pandas 的多层索引中重命名列名。Pandas 的多层索引是高级数据清理和数据分析的必备工具,然而其列名常常十分复杂。我们提供了两种方法来重命名多层索引的列名,分别是使用单独的 rename 方法和利用方法链中的 set_axisrename 方法。无论使用哪种方法,我们都可以方便地将复杂的多层索引列名精简为更加清晰和易于理解的形式。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册