Python Pandas – 从多级索引中获取特定级别的值

Python Pandas – 从多级索引中获取特定级别的值

Pandas是一种列式数据分析工具,它被广泛应用于数据科学中。一个常见的使用场景是多级索引,比如一个数据框可能有很多列,每一列都有一个或多个类别。在这种情况下,使用多级索引是很有用的,它能够有效地组织数据并帮助我们轻松地从各个方面分析数据。在这篇文章中,我们将探讨如何从多级索引中获取特定级别的值。

什么是多级索引?

多级索引是在一个或多个基本索引(即列)的基础上创建的索引。这些基本索引可以是单个索引(一个列)或多个索引(多个列)。多级索引可用于多维数组和数据框。举个例子,让我们考虑一个两级索引的数据框:

import pandas as pd
import numpy as np

#index
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
          ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]

s = pd.DataFrame(np.random.randn(8, 4), index=arrays)
print(s)

输出:

                  0         1         2         3
bar one    -0.471699  1.550646 -0.925862 -1.476035
    two    -0.874408  0.521301 -0.327372  0.207584
baz one     0.641730 -1.200666  0.763465  0.759663
    two     0.799273 -1.046444 -1.057492 -1.604930
foo one     0.146437 -0.687297  0.996098 -0.211996
    two    -0.275809  0.277331 -1.374320 -0.295286
qux one     0.747631  0.291571 -0.267705 -0.910626
    two    -1.801724 -1.133285  0.059880  0.482115

从输出可以看出,该数据框有两个基本索引(列),bar/baz/foo/qux 和 one/two。我们可以通过这些索引来访问数据框中的数据。

如何从多级索引中获取特定级别的值?

下面是获取一个特定级别的值的方法,其中,“索引名称”指的是在数据框上定义的每个级别的名称,从0开始编号。要获取级别0的值,可以使用loc方法,在第一个括号中输入 : 以获取所有元素,然后在第二个括号中输入要获取的索引:

s.loc['bar',:]

输出:

            0         1         2         3
one -0.471699  1.550646 -0.925862 -1.476035
two -0.874408  0.521301 -0.327372  0.207584

我们同样可以获取级别1的数据:

s.loc[(slice(None), 'two'),:]

输出:

                  0         1         2         3
bar two    -0.874408  0.521301 -0.327372  0.207584
baz two     0.799273 -1.046444 -1.057492 -1.604930
foo two    -0.275809  0.277331 -1.374320 -0.295286
qux two    -1.801724 -1.133285  0.059880  0.482115

注意,在第一次省略中,我们使用了slice(None)语句,这意味着我们要获取所有“bar, baz, foo和qux”的级别0,而在第二个括号中,我们使用了’two’,这意味着我们只要获取级别1中所有等于“two”的值。

如果我们想要获取某一列的特定级别的值,我们可以使用相同的方法,只需要选择我们想要的列即可:

s.loc[(slice(None),'two'),2]

输出:

bar   -0.327372
baz   -1.057492
foo   -1.374320
qux    0.059880
Name: 2, dtype: float64

在这个例子中,我们已经确定了我们要获取第2列中所有等于“two”的值。另外,需要注意的是,结果是一个包含所有“two”值的Series,Series中的索引名称是我们之前定义的所有基础索引(列)的级别0名称。

我们还可以使用其他方法来获得更灵活的满足需求的数据,例如filter方法:

s.filter(like='o',axis=0)

输出:

                  0         1         2         3
bar one    -0.471699  1.550646 -0.925862 -1.476035
baz one     0.641730 -1.200666  0.763465  0.759663
foo one     0.146437 -0.687297  0.996098 -0.211996
qux one     0.747631  0.291571 -0.267705 -0.910626

这个方法将返回一个数据框,其中包含了所有包含字母“o”的行。这个例子中,返回的数据框包含了所有包含“one”(级别1)的行,可看出 filter 方法非常有用。

结论

在这篇文章中,我们学习了如何从多级索引中获取特定级别的值,以及如何使用 filter 方法提取数据。这些技巧可以帮助我们更好地理解和操作 Pandas 中复杂结构的数据。多级索引的应用不仅仅局限于上述例子,而是非常常见,希望这篇文章对你理解 Pandas 和数据分析有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程