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 中准确、快速地提取所需数据。
极客笔记