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 和数据分析有所帮助。