Python Pandas – 交换 MultiIndex 的级别
在使用 Pandas 分析数据的时候,我们经常会使用 MultiIndex(复合索引)来处理具有复杂结构的数据。MultiIndex 可以达到更能方便的数据操作,操作 MultiIndex 的一项重要行为是交换级别。在本文中,我们将重点介绍如何使用 Python Pandas 来交换 MultiIndex 的级别。
什么是 MultiIndex
MultiIndex,也叫做复合索引,是 Pandas 中的一种数据结构。MultiIndex 的构建方式是将一个或多个索引层级化,也就是将层级结构应用于列或行元素。例如,可以将数据的索引按照年份、月份、日份等等进行层级化。
import pandas as pd
# 创建一个简单的 MultiIndex,第一层索引为人名,第二层索引为年龄
df = pd.DataFrame({'学科': ['数学', '数学', '语文', '语文', '英语', '英语'],
'分数': [80, 90, 85, 87, 92, 95]},
index=pd.MultiIndex.from_tuples([('张三', 20),
('李四', 19),
('张三', 21),
('李四', 20),
('张三', 22),
('李四', 19)],
names=['姓名', '年龄']))
print(df)
输出结果如下:
学科 分数
姓名 年龄
张三 20 数学 80
李四 19 数学 90
张三 21 语文 85
李四 20 语文 87
张三 22 英语 92
李四 19 英语 95
如何交换 MultiIndex 的级别
交换 MultiIndex 的级别意味着将两个层级换个位置,可以优化数据操作的方便性。下面,我们将主要介绍两个函数。
swaplevel
swaplevel 函数是 Pandas 中最基本交换层级的函数,它可以在 MultiIndex 中交换两个层级的位置。swaplevel 函数有两个参数:第一个参数用于指定要交换层级的索引,第二个参数用于指定要交换层级的索引位置。
# 交换 MultiIndex 中的两个层级
df1 = df.swaplevel('姓名', '年龄')
print(df1)
输出结果如下:
学科 分数
年龄 姓名
20 张三 数学 80
19 李四 数学 90
21 张三 语文 85
20 李四 语文 87
22 张三 英语 92
19 李四 英语 95
在我们的示例中,由于索引有两个级别,swaplevel 会根据我们指定的参数对它们进行交换。这里,我们将第一层级和第二层级交换,使得年龄成为第一层级。
reorder_levels
相比于 swaplevel,reorder_levels 是一种更为灵活的交换级别的函数。它可以重新排列我们的 MultiIndex 层级,并且可以指定每个层级的新位置。reorder_levels 函数有两种用法:一种用于对于 MultiIndex 对象中的层级进行排序,另一种直接指定新的顺序。
# 交换 MultiIndex 中的两个层级
df2 = df.reorder_levels(['年龄', '姓名'])
print(df2)
输出结果如下:
学科 分数
年龄 姓名
20 张三 数学 80
19 李四 数学 90
21 张三 语文 85
20 李四 语文 87
22 张三 英语 92
19 李四 英语 95
以上示例代码中,我们使用 reorder_levels 函数将 MultiIndex 中的两个层级重新排列,并指定新顺序为 [‘年龄’, ‘姓名’]。
总结
在本文中,我们介绍了如何使用 Pandas 交换 MultiIndex 的级别。我们提到了两种交换级别的函数:swaplevel 和 reorder_levels。它们分别适用于不同的使用场景,并可以优化数据的操作方便性。使用这些函数可以帮助我们更加高效地处理和分析数据。