Pandas中怎么使用MultiIndex选择并提取任何行和列
更新时间:2023-11-25什么是MultiIndex
在pandas中,我们有时需要对多维数据进行索引和选择。这种情况下需要使用多级索引(MultiIndex)。MultiIndex可以被看作是由元组组成层次结构的索引,这种多级索引在对大型数据集的处理中尤为有用。
import pandas as pd data = {'name': ['John', 'John', 'Mike', 'Mike', 'Kate', 'Kate'], 'subject': ['English', 'Math', 'English', 'Math', 'English', 'Math'], 'score': [80, 60, 70, 85, 90, 75]} df = pd.DataFrame(data) df.set_index(['name', 'subject'], inplace=True) print(df)
上述例子中使用了两列来设置索引,相当于用两个维度来确定一项数据。下面会针对这个数据框进行选择和提取。
提取特定的行和列
有时候我们需要根据MultiIndex提取特定的行和列,可以使用loc(位置选择器)方法,loc方法可以通过元组的方式来选择。下面的代码演示了如何选择名字为John的学生成绩:
print(df.loc['John'])
运行上述代码会输出名字为John的学生的所有成绩:
score subject English 80 Math 60
元组中的第一个元素用来定位第一级索引,第二个元素用来定位第二级索引。
筛选任意行和列
通过loc方法,我们可以选择MultiIndex中的任意行和列。下面的代码演示了如何选择名字为John和Mike的学生成绩的数学成绩:
print(df.loc[(['John', 'Mike'], 'Math')])
运行上述代码会输出名字为John和Mike的学生的数学成绩:
score name subject John Math 60 Mike Math 85
元组中第一个元素的列表定义了我们的行要素,第二个元素是我们的列元素。这种使用方式相当灵活。
选择所有的某个级别的行或列
在MultiIndex中,有时候我们需要选择某个级别下所有的行或列。可以使用iloc和index_slice(index切片)方法来实现下列代码演示如何选择Math科目下所有学生成绩:
idx = pd.IndexSlice print(df.loc[:, idx[:, 'Math']])
运行上述代码会输出:
score name subject John Math 60 Mike Math 85 Kate Math 75
iloc方法可以使用数字来定位位置,而IndexSlice方法则使用切片的方式来选择。
总的来说,使用MultiIndex可以很容易地对多维数据进行索引和选择。使用loc方法,可以选择单个或多个索引单元格,使用index_slice方法可以根据切片选择特定索引。这样我们就能够更加高效的对pandas数据框进行读取和选择,有利于提升我们的编程效率。