Pandas pandas, 如何访问多级索引的数据框
在本文中,我们将讨论在 Pandas 中如何访问多级索引的数据框。Pandas 是 Python 中强大的数据分析库,能够对表格数据进行灵活高效的操作和分析。其中,多级索引是一种常用的数据结构,能够方便地存储并处理多维度的数据。
阅读更多:Pandas 教程
多级索引数据结构
首先,让我们来看一下多级索引的数据结构。多级索引可以理解为在一个数据框(DataFrame)中的多个列上设置索引,这样就能够在不同的方向上进行多层次的划分。例如,下面是一个简单的两层索引数据框:
import pandas as pd
data = {'class': ['A', 'A', 'B', 'B', 'B'],
'name': ['Tom', 'Jerry', 'Jack', 'Rose', 'David'],
'grade': [97, 83, 92, 88, 90]}
df = pd.DataFrame(data)
multi_df = df.set_index(['class', 'name'])
print(multi_df)
输出结果如下:
grade
class name
A Tom 97
Jerry 83
B Jack 92
Rose 88
David 90
可以看到,数据框中的索引已经由 class 和 name 两列组成,可以方便地进行按照班级和姓名的多层次分析。在数据框中,可以通过 .index 属性来访问当前使用的索引,例如:
print(multi_df.index)
输出结果如下:
MultiIndex([('A', 'Tom'),
('A', 'Jerry'),
('B', 'Jack'),
('B', 'Rose'),
('B', 'David')],
names=['class', 'name'])
这样,我们就可以利用多级索引方便地进行数据的查询、筛选和汇总操作。
多级索引数据的访问
在多级索引的数据框中,访问数据的方式与普通的一维索引有所不同,需要使用 .loc 或 .iloc 方法。例如,要访问某一班级某一个学生的成绩,可以使用如下的方式:
print(multi_df.loc[('A', 'Tom'), 'grade'])
输出结果为:
97
这里需要注意的是,由于 class 和 name 等多个列上都有索引,因此在访问时需要将这些索引一并作为访问参数。另外,由于 .loc 方法使用了显式的列名来访问数据,因此也需要写明访问的列名 grade。
如果要访问某一班级或某一学生的所有成绩,可以使用 .loc 方法的部分访问功能:
print(multi_df.loc['A'])
输出结果为:
grade
name
Tom 97
Jerry 83
这里只传递了第一维索引 class 上的值,因此输出的数据也只包含了班级为 A 的同学的成绩情况。
类似地,也可以使用 .iloc 方法来访问多级索引数据框中的数据。这里的访问方式需要在 .iloc 方法中使用行列的整数索引。例如,要访问第一行第一列的数据,可以使用如下方式:
print(multi_df.iloc[0, 0])
输出结果为:
97
利用 .iloc 方法也可以进行数据的部分访问:
print(multi_df.iloc[:2])
输出结果为:
grade
class name
A Tom 97
Jerry 83
这里的输出结果与使用 .loc 方法时相同,只不过在 .iloc 方法中使用了整数索引来进行访问。
多级索引数据的筛选
在多级索引数据框中,使用 .loc 方法可以方便地进行数据的筛选操作。例如,假设我们要筛选出班级为 B 的学生,可以使用如下的方式:
print(multi_df.loc['B'])
输出结果如下:
grade
name
Jack 92
Rose 88
David 90
这里不指定第二个参数,则 .loc 方法会默认访问所有的列,因此输出了班级为 B 的所有同学的所有成绩情况。
如果要进一步筛选,可以在 .loc 方法中传递一个布尔值数组作为选择条件。例如,要筛选出成绩在 90 分以上的学生,可以使用如下的方式:
print(multi_df.loc[multi_df['grade'] > 90])
输出结果如下:
grade
class name
A Tom 97
B Jack 92
B David 90
这里使用了布尔值数组作为筛选条件,在多级索引数据框中同样适用。
多级索引数据的汇总
在多级索引数据框中,也可以方便地进行数据的汇总操作。此时可以使用 .groupby 方法来分组,并使用汇总函数对数据进行汇总。例如,要对不同班级的同学的成绩进行统计,可以使用如下的方式:
print(multi_df.groupby('class').mean())
输出结果如下:
grade
class
A 90.0
B 90.0
这里使用了 .groupby 方法将数据按照班级进行分组,然后使用 .mean() 方法求出了每个班级的平均成绩。
除了可以对整个数据框进行汇总之外,也可以对每个索引层进行汇总操作。例如,要按照班级进行成绩的统计,可以使用如下的方式:
print(multi_df.groupby('class')['grade'].mean())
输出结果如下:
class
A 90.0
B 90.0
Name: grade, dtype: float64
这里使用了 .groupby 方法对 class 索引进行分组,并只对 grade 列进行平均值汇总,因此输出结果只包含了成绩平均值的一列。
总结
在本文中,我们介绍了在 Pandas 中如何访问多级索引的数据框,包括多级索引数据结构、多级索引数据的访问、筛选和汇总操作。多级索引数据结构是一种方便存储和操作多维度数据的结构,可以使用 .loc 和 .iloc 方法进行精确访问,也可以使用 .groupby 方法进行汇总操作。熟练掌握多级索引数据框的使用可以方便地进行数据处理和分析,是数据分析工作中的重要工具之一。
极客教程