Pandas MultiIndex DataFrame中选取行数据

Pandas MultiIndex DataFrame中选取行数据

在本文中,我们将介绍如何在 Pandas MultiIndex DataFrame 中选取行数据。MultiIndex 是 Pandas 中的层级索引,它允许我们为 DataFrame 的行或列添加多个层级索引。这使得 DataFrame 成为适合复杂数据聚合和分析的工具。使用 MultiIndex DataFrame,我们可以通过一些灵活的索引技巧来选取需要的数据。

阅读更多:Pandas 教程

创建 MultiIndex DataFrame

我们先来创建一个 MultiIndex DataFrame,以演示如何选取行数据。以下是一个具有两个层级索引“State”和“City”的 DataFrame,它展示了美国三个城市的汽车销售数据。

import pandas as pd

sales = pd.DataFrame({'State': ['California', 'California', 'New York', 'New York', 'Texas', 'Texas'],
                      'City': ['Los Angeles', 'San Francisco', 'New York City', 'Buffalo', 'Houston', 'Dallas'],
                      'Year': [2019, 2019, 2019, 2019, 2019, 2019],
                      'Cars Sold': [120, 140, 80, 90, 110, 120]})
multi_sales = sales.set_index(['State', 'City'])
multi_sales
                           Year  Cars Sold
State      City                         
California Los Angeles  2019        120
           San Francisco 2019      140
New York   New York City 2019     80
           Buffalo       2019     90
Texas      Houston       2019     110
           Dallas        2019     120

可以看到,我们已经成功地为该 DataFrame 的行添加了两层索引。

选取 MultiIndex DataFrame 中的行

选取单层级索引中的行

首先,我们来看如何选取 MultiIndex DataFrame 中单个层级索引中的数据。以下代码将显示如何选取城市”Los Angeles”中的数据。

multi_sales.loc['California']
               Year  Cars Sold
City                         
Los Angeles   2019        120
San Francisco 2019        140

注意,这个命令返回了一个仅包含一个层级索引数据的 Pandas DataFrame。我们可以进行数据选取和分析。例如,以下代码将返回加利福尼亚州所有城市的分组数据。

multi_sales.loc['California'].groupby(level='City').sum()
              Year  Cars Sold
City                        
Los Angeles   2019   120
San Francisco 2019   140

选取多层级索引中的行

现在,我们来看看如何选取 MultiIndex DataFrame 中的多层级索引。假设我们要选取加利福尼亚州洛杉矶和旧金山这2个城市的数据。

multi_sales.loc[('California', ['Los Angeles', 'San Francisco'])]
                          Year  Cars Sold
State      City                         
California Los Angeles  2019        120
           San Francisco 2019      140

在这里,我们使用了元组来选取多个层级索引。我们可以把元组的第一个元素作为第一层的索引,第二个元素作为第二层的索引,从而选取数据。

使用切片选取 MultiIndex DataFrame 中的行

除了上述选取行的方法以外,我们还可以使用切片选取数据。以下代码演示了如何使用 Pandas 的切片语法来选取所有年份为 2019 的数据。

multi_sales.loc[(slice(None),), :]
                          Year  Cars Sold
State      City                         
California Los Angeles  2019        120
           San Francisco 2019      140
New York   New York City 2019     80
           Buffalo       2019     90
Texas      Houston       2019     110
           Dallas        2019     120

在这种情况下,我们使用了 pandas 的slice() 函数,slice(None) 表示选取所有的第一层级索引,因为我们不知道具体的值。 : 表示选取所有列。这将返回整个数据集,其中所有行的第一层索引都是选定的。

我们还可以在切片语法中指定特定的行索引值,如以下示例所示。

multi_sales.loc[(slice('California', 'New York'), ['Buffalo', 'Los Angeles']), :]
                         Year  Cars Sold
State      City                        
California Los Angeles  2019        120
New York   Buffalo      2019         90

该代码将返回“加利福尼亚州”和“广州”的“年份”和“汽车销售”数据。我们使用了多个切片符号来指定多个值,以便在第一层中选择加利福尼亚和纽约市的值,在第二层中选择水牛城和洛杉矶的值。

带条件选取 MultiIndex DataFrame 中的行

假设现在我们想选择 2019 年购买的汽车销售数量大于 100 辆的数据。

multi_sales[(multi_sales['Year'] == 2019) & (multi_sales['Cars Sold'] > 100)]
                          Year  Cars Sold
State      City                         
California San Francisco 2019       140
Texas      Houston       2019       110
           Dallas        2019       120

我们使用 Pandas 的布尔索引来选取数据。上述代码将返回“2019 年”中“销售量”大于 100 辆的城市数据。

总结

在本文中,我们介绍了如何在 Pandas MultiIndex DataFrame 中选取行数据。我们学习了多个技巧,包括使用元组、切片和布尔索引。这些技巧可以帮助我们从复杂的 MultiIndex DataFrame 中准确、快速地提取所需数据。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程