pandas 中,MultiIndex 是一种特殊的索引类型,它允许你在 SeriesDataFrame 中使用多个索引级别(即多级索引)。这使得你可以在一个轴上拥有多个维度的数据,从而可以更灵活地组织和分析数据。

创建 MultiIndex

  1. 使用 pd.MultiIndex.from_arrays 方法: 你可以从多个数组列表中创建一个 MultiIndex

    import pandas as pd
    
    arrays = [
        ['John', 'John', 'Lisa', 'Lisa'],
        ['Accounting', 'Engineering', 'Accounting', 'Engineering']
    ]
    tuples_index = pd.MultiIndex.from_arrays(arrays, names=('Name', 'Department'))
    
    # 创建一个示例 DataFrame
    df = pd.DataFrame({'Salary': [70000, 80000, 75000, 90000]}, index=tuples_index)
    print(df)

  2. 使用 pd.MultiIndex.from_tuples 方法: 如果你已经有了一个元组列表,可以直接使用这个方法。

    tuples_index = pd.MultiIndex.from_tuples([
        ('John', 'Accounting'),
        ('John', 'Engineering'),
        ('Lisa', 'Accounting'),
        ('Lisa', 'Engineering')
    ], names=('Name', 'Department'))
    
    df = pd.DataFrame({'Salary': [70000, 80000, 75000, 90000]}, index=tuples_index)
    print(df)

  3. 使用 pd.MultiIndex.from_product 方法: 这个方法允许你创建一个笛卡尔积的多级索引。

    tuples_index = pd.MultiIndex.from_product([
        ['John', 'Lisa'],
        ['Accounting', 'Engineering']
    ], names=('Name', 'Department'))
    
    df = pd.DataFrame({'Salary': [70000, 80000, 75000, 90000]}, index=tuples_index)
    print(df)

操作 MultiIndex

  1. 选择数据: 你可以通过索引的级别来选择数据。

    print(df.xs('John', level='Name'))  # 选择名为 John 的行
    print(df.loc[('John', 'Engineering')])  # 选择 John 在 Engineering 部门的记录

  2. 重置索引: 如果你想要将多级索引转换回单级索引,可以使用 reset_index 方法。

    df_reset = df.reset_index()
    print(df_reset)

  3. 索引的层次结构操作: 你可以添加、删除或重新排序索引的级别。

    df = df.reorder_levels(['Department', 'Name'])
    print(df)

  4. 索引的切片: 你可以使用切片来选择多级索引的一部分。

    print(df.loc[('Accounting', ':')])  # 选择所有在 Accounting 部门的记录

MultiIndex 提供了非常强大的数据组织能力,使得复杂的数据结构可以被有效地管理和分析。在处理具有多个分类变量的数据时,MultiIndex 尤其有用。