pandas多层索引的创建和取值以及排序的实现

  • Post category:Python

下面是关于“pandas多层索引的创建和取值以及排序的实现”的完整攻略:

什么是多层索引?

在 pandas 中,我们可以创建多层索引,也叫多级索引或者层次索引,它可以在一个轴向上拥有多个索引级别,它可以使我们处理高维度数据变得更加方便。

多层索引的创建

我们可以使用 pd.MultiIndex.from_tuples() 方法进行多层索引的创建,其中传入一个元组列表,每个元组代表一个索引级别,下面是一个示例代码:

import pandas as pd

# 创建一个元组列表
index = [('cat', 'eye'), ('cat', 'nose'), ('dog', 'eye'), ('dog', 'nose')]

# 创建多层索引
multi_index = pd.MultiIndex.from_tuples(index)

# 打印结果
print(multi_index)

上面代码的输出结果如下:

MultiIndex([('cat', 'eye'),
            ('cat', 'nose'),
            ('dog', 'eye'),
            ('dog', 'nose')],
           )

我们还可以使用 pd.MultiIndex.from_product() 来实现多层索引的创建,下面是一个示例代码:

import pandas as pd

# 创建一个列表
animals = ['cat', 'dog']
features = ['eye', 'nose']

# 使用 from_product 创建多层索引
multi_index = pd.MultiIndex.from_product([animals, features])

# 打印结果
print(multi_index)

上面代码的输出结果如下:

MultiIndex([('cat', 'eye'),
            ('cat', 'nose'),
            ('dog', 'eye'),
            ('dog', 'nose')],
           )

多层索引的取值

创建了多层索引之后,我们可以使用 .loc[] 方法来取值,不同层级的索引可以通过传递多个参数实现,下面是一个示例代码:

import pandas as pd

# 创建一个元组列表
index = [('cat', 'eye'), ('cat', 'nose'), ('dog', 'eye'), ('dog', 'nose')]

# 创建 DataFrame
data = {'count1': [1, 2, 3, 4],
        'count2': [2, 4, 6, 8]}
df = pd.DataFrame(data, index=index)

# 取出一级索引为‘cat’的值
print(df.loc['cat'])

# 取出二级索引为‘eye’的值
print(df.loc[:, 'eye'])

# 取出一级索引为‘cat’和二级索引为‘eye’的值
print(df.loc[('cat', 'eye')])

上面代码的输出结果分别如下:

      count1  count2
eye        1       2
nose       2       4

cat  eye    1
     nose   2
dog  eye    3
     nose   4
Name: count1, dtype: int64

count1    1
count2    2
Name: (cat, eye), dtype: int64

多层索引的排序

在多层索引中,我们可以使用 df.sort_index() 方法来进行排序,其中我们可以指定要排序的级别和升序或降序,下面是一个示例代码:

import pandas as pd

# 创建一个元组列表
index = [('cat', 'eye'), ('cat', 'nose'), ('dog', 'eye'), ('dog', 'nose')]

# 创建 DataFrame
data = {'count1': [1, 2, 3, 4],
        'count2': [2, 4, 6, 8]}
df = pd.DataFrame(data, index=index)

# 按照一级索引升序排序
sorted_df = df.sort_index(level=0, ascending=True)
print(sorted_df)

# 按照二级索引降序排序
sorted_df = df.sort_index(level=1, ascending=False)
print(sorted_df)

上面代码的输出结果分别如下:

        count1  count2
cat eye       1       2
    nose      2       4
dog eye       3       6
    nose      4       8

        count1  count2
eye cat       1       2
    dog       3       6
nose cat       2       4
    dog       4       8

以上就是有关“pandas多层索引的创建和取值以及排序的实现”的完整攻略。