Python Pandas – 获取MultiIndex中的级别名称
Pandas 是 Python 中一个非常强大的数据分析工具,在处理多层索引数据时尤为突出。在使用 MultiIndex 进行多层索引时,经常需要获取各级别的名称,本文将介绍如何使用 Python Pandas 获取 MultiIndex 中的级别名称。
更多Pandas相关文章,请阅读:Pandas 教程
MultiIndex 简介
MultiIndex 是 Pandas 中用于处理多层索引的结构,它能够处理高维数据,并且能够轻松地进行数据的切片和切块操作。具体来说,MultiIndex 是一种层次化索引(hierarchical indexing),它将多个索引组合起来形成一个多层次索引,让用户可以更加方便地进行分组、切片等操作。
下面是一个 MultiIndex 索引示例:
import pandas as pd
import numpy as np
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
s = pd.Series(np.random.randn(8), index=index)
这个示例中,我们用 numpy 创建了一个二维数组,其中有两列,第一列包含 { ‘bar’, ‘baz’, ‘foo’, ‘qux’ },第二列包含 { ‘one’, ‘two’ },然后将这个数组转变为二元组的列表,再用 pandas 中的 MultiIndex 方法生成一个二级联合索引,并将其应用在一个随机数据集上生成一个系列 s。
获取级别名称
获取 MultiIndex 索引的级别名称是 Pandas 中常用的操作之一,主要用于统计分组或列名格式化等场合。Pandas 提供了两种方法来获取 MultiIndex 索引的级别名称,分别是“levels”和“names”。
levels 方法
levels 方法返回 MultiIndex 所有级别的名称,数据类型为列表,列表元素为各级别索引的不同取值。levels 方法可以直接在 MultiIndex 对象上调用。
import pandas as pd
import numpy as np
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
print(index.levels)
运行结果为:
[frozenset({'bar', 'baz', 'foo', 'qux'}), frozenset({'one', 'two'})]
这里的 frozenset 表示不可变集合,它可以用于哈希和作为字典键值。通过 levels 方法可以看出 MultiIndex 索引有两个级别,第一级包含四个元素,第二级包含两个元素。
names 方法
names 方法返回 MultiIndex 所有级别的名称,数据类型为列表,列表元素为各级次索引的名称。names 方法可以直接在 MultiIndex 对象上调用。
import pandas as pd
import numpy as np
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
print(index.names)
运行结果为:
['first', 'second']
这里的 [‘first’, ‘second’] 是 MultiIndex 的两个级别的名称。
示例
import pandas as pd
import numpy as np
arrays = [np.array(['A', 'A'B', 'B', 'C', 'C', 'C']),
np.array(['red', 'blue', 'red', 'blue', 'red', 'blue', 'green']),
np.array(['2019Q1', '2019Q2', '2019Q1', '2019Q2', '2019Q1', '2019Q2', '2019Q2'])]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['class', 'color', 'quarter'])
df = pd.DataFrame({'sales': [10, 20, 30, 40, 50, 60, 70],
'profit': [-1, 2, -2, 3, -3, 4, -4],
'expenses': [5, 5, 6, 6, 7, 7, 8]}, index=index)
print(df)
这里我们构造了一个三级 MultiIndex 索引,其中包含了班级、颜色和季度三个级别的信息,然后生成了一个 DataFrame,其中包含三个列:销售额、利润和费用。接下来我们分别使用 levels 方法和 names 方法来获取这个 MultiIndex 的属性。
print(index.levels)
print(index.names)
运行结果为:
[frozenset({'A', 'B', 'C'}), frozenset({'blue', 'green', 'red'}), frozenset({'2019Q1', '2019Q2'})]
['class', 'color', 'quarter']
levels 方法输出 MultiIndex 的三个级别,names 方法输出 MultiIndex 的三个级别的名称。
结论
本文介绍了使用 Python Pandas 获取 MultiIndex 中的级别名称的方法。通过 levels 方法和 names 方法,可以轻松地获取 MultiIndex 中各个级别的信息。在实际应用中,获取 MultiIndex 的级别信息是非常有用的,可以帮助我们更好地处理和分析多维数据。