📜  数据帧多索引查询 - Python (1)

📅  最后修改于: 2023-12-03 15:26:07.713000             🧑  作者: Mango

数据帧多索引查询 - Python

在 Pandas 中,我们可以通过设置多级索引(MultiIndex)来为数据帧增加多个维度。这使得我们可以方便地对数据进行多维度查询和分析。本文将介绍如何在多级索引下进行数据帧的查询操作。

设置多级索引

首先,我们需要了解如何设置数据帧的多级索引。下面是一个样例数据:

import pandas as pd

data = {
    'class': ['A', 'A', 'B', 'B', 'B'],
    'name': ['Alice', 'Bob', 'Cathy', 'David', 'Eva'],
    'score': [80, 90, 85, 70, 95]
}

df = pd.DataFrame(data)
print(df)

输出:

  class   name  score
0     A  Alice     80
1     A    Bob     90
2     B  Cathy     85
3     B  David     70
4     B    Eva     95

我们可以将 'class' 和 'name' 作为索引列,如下所示:

df = df.set_index(['class', 'name'])
print(df)

输出:

             score
class name       
A     Alice     80
      Bob       90
B     Cathy     85
      David     70
      Eva       95

此时,数据帧 df 的索引由两层组成。

多级索引查询
loc

我们可以利用 loc 方法对多级索引的数据帧进行查询。例如,查询 'class' 是 'B'、'name' 是 'Cathy' 的学生的成绩:

print(df.loc[('B', 'Cathy'), 'score'])

输出:

85
xs

我们也可以使用 xs 方法对多级索引进行查询,该方法可以更加方便地查询某一特定维度的数据。例如,查询 'class' 是 'B' 的学生的成绩:

print(df.xs('B', level='class')['score'])

输出:

name
Cathy    85
David    70
Eva      95
Name: score, dtype: int64

注意到 xs 的第二个参数表示查询的级别是 'class',因此我们可以直接使用方括号访问 'score' 列,而不需要再使用 loc 方法。

query

对于比较复杂的条件查询,我们可以使用 query 方法。例如,查询所有分数大于等于 80 分的学生:

print(df.query('score >= 80'))

输出:

             score
class name       
A     Alice     80
      Bob       90
B     Cathy     85
B     Eva       95
小结

本文介绍了在 Pandas 中利用多级索引对数据帧进行查询的方法。我们可以使用 loc 方法、xs 方法以及 query 方法来实现不同层次的查询操作。多级索引能够为我们提供更加灵活的数据查询与分析方式,是 Pandas 中一个非常重要的概念。