Python Pandas – 使用级别名称返回删除多个级别的MultiIndex

Python Pandas – 使用级别名称返回删除多个级别的MultiIndex

在 Pandas 中,MultiIndex 可以帮助我们创建更复杂的数据结构。但是,在某些情况下,我们可能需要删除多个级别。本文将介绍如何使用级别名称返回删除多个级别的 MultiIndex。

什么是 MultiIndex?

MultiIndex 是 Pandas 中一种用于创建分层索引的数据结构,它允许在一个轴上拥有多个级别。例如,我们可以在一个 DataFrame 中创建一个具有城市和日期两个级别的 MultiIndex,如下所示:

import pandas as pd

df = pd.DataFrame(
    {
        "城市": ["北京", "上海", "广州", "北京", "上海", "广州"],
        "日期": ["2021-01-01", "2021-01-01", "2021-01-01", "2021-01-02", "2021-01-02", "2021-01-02"],
        "销售额": [100, 200, 150, 120, 250, 180],
    }
)

df = df.set_index(['城市', '日期'])
print(df)

输出结果为:

                销售额
城市  日期           
北京  2021-01-01   100
上海  2021-01-01   200
广州  2021-01-01   150
北京  2021-01-02   120
上海  2021-01-02   250
广州  2021-01-02   180

可以看到,索引有两个级别:城市和日期。

返回删除多个级别的 MultiIndex

如果想要删除 MultiIndex 中的多个级别,我们可以使用 drop() 方法。但是,这个方法并不支持一次性删除多个级别。为了解决这个问题,我们可以使用以下函数来删除多个级别:

def drop_level_by_names(df: pd.DataFrame, names: list) -> pd.DataFrame:
    """
    Given a multiindex DataFrame and a list of level names to remove, 
    returns a DataFrame with the desired levels removed.
    """
    ix = df.index
    for n in names:
        ix = ix.droplevel(n)
    return df.reindex(ix)

这个函数接受一个 DataFrame 和一个要删除级别名称的列表,然后返回一个不包含指定级别的新 DataFrame。例如,如果我们想要删除上面示例 DataFrame 中的城市和日期两个级别,可以这样做:

new_df = drop_level_by_names(df, ['城市', '日期'])
print(new_df)

输出结果为:

     销售额
0   100
1   200
2   150
3   120
4   250
5   180

可以看到,新 DataFrame 中不包含城市和日期两个级别。

结论

在 Pandas 中,MultiIndex 是一种用于创建分层索引的数据结构,可以帮助我们创建更复杂的数据结构。如果想要删除 MultiIndex 中的多个级别,我们可以使用 drop() 方法。但是,这个方法并不支持一次性删除多个级别。为了解决这个问题,我们可以使用上面提到的 drop_level_by_names() 函数来删除多个级别。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程