Python Pandas – 获取MultiIndex中标签或标签元组的位置
在Pandas的MultiIndex中,每个索引级别(level)可以有多个标签(label),同样的标签在不同的级别上可能会出现多次。本文将展示如何获取MultiIndex中标签或标签元组(tuple)的位置信息。
更多Pandas相关文章,请阅读:Pandas 教程
创建MultiIndex
在进入具体示例之前,先给出一个创建MultiIndex的简单示例:
import pandas as pd
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
s = pd.Series(range(8), index=index)
上述代码生成一个拥有两个级别的MultiIndex,并将其作为索引用于一个Series。
我们可以通过访问每个级别上的标签来选择Series中的数据。例如,通过访问第一个级别(first level)的标签“foo”和第二个级别(second level)的标签“two”,可以得到Series中的一个标量值:
>>> s.loc[('foo', 'two')]
5
在接下来的示例中,我们将着重介绍如何获取MultiIndex中标签或标签元组的位置信息。
标签元组的位置
在MultiIndex中,有时需要知道一个标签元组在索引中的位置。可以通过get_loc()
方法获取标签元组在MultiIndex中的位置,例如:
>>> loc = s.index.get_loc(('foo', 'two'))
>>> loc
4
上述代码返回标签元组('foo', 'two')
在MultiIndex中的位置,即第5行(Python索引从0开始计数)。
单一标签的位置
如果知道一个级别上的标签值,需要获取它在该级别中的位置,可以使用get_loc()
方法。例如,下面的代码返回第一个级别上标签为“foo”的位置:
>>> s.index.levels[0].get_loc('foo')
2
上述代码返回0-based的标签位置,即标签“foo”的位置为2。
多个标签的位置
当需要查找MultiIndex中具有特定标签的行时,可以使用.loc[]
方法。下面的代码返回第一个级别上标签为“foo”或“bar”的所有数据:
>>> s.loc[['foo', 'bar'], :]
first second
bar one 0
two 1
foo one 4
two 5
dtype: int64
可以使用get_locs()
方法获取多个标签在一个级别的位置。例如,下面的代码返回第一个级别上标签为“foo”或“bar”的所有位置:
>>> s.index.levels[0].get_locs(['foo', 'bar'])
array([0, 1, 4, 5])
上述代码返回0-based的位置数组,其中标签“bar”的位置为0和1,标签“foo”的位置为4和5。
结论
本文针对Python Pandas中的MultiIndex介绍了如何获取标签元组的位置以及单一或多个标签在一个级别上的位置。这些方法将为数据分析中的数据选择和处理提供便利。