Pandas 多重索引的选择
在本文中,我们将介绍Pandas中的多重索引以及如何从多重索引中选择和切片数据。多重索引允许您使用多个键来创建一个唯一的行标签,可以更方便地处理多维数据集。
阅读更多:Pandas 教程
创建多重索引
我们可以通过将一个包含多个列的元组列表作为参数来创建多重索引。例如,下面的代码创建了一个包含“state”和“city”列的DataFrame,并使用这两个列创建了一个多重索引:
import pandas as pd
data = {'state': ['CA', 'CA', 'NY', 'NY', 'TX', 'TX'],
'city': ['San Francisco', 'Los Angeles', 'New York', 'Buffalo', 'Houston', 'Dallas'],
'population': [883305, 3971883, 8175133, 259985, 2296224, 1343573]}
df = pd.DataFrame(data)
df.set_index(['state', 'city'], inplace=True)
print(df)
输出结果为:
population
state city
CA San Francisco 883305
Los Angeles 3971883
NY New York 8175133
Buffalo 259985
TX Houston 2296224
Dallas 1343573
单层次索引
现在,我们来看看如何对多重索引中的数据进行选择和切片。首先,我们可以使用.loc和.iloc选择单层次索引数据。
.loc用于基于索引标签选择数据,而.iloc用于基于索引位置选择数据。例如,使用.loc选择来自“NY”州的所有城市的人口数据:
print(df.loc['NY'])
输出结果为:
population
city
New York 8175133
Buffalo 259985
再来看看使用.iloc选择数据的例子。以下代码示例基于位置选择数据,包含第一行和第二行:
print(df.iloc[[0,1]])
输出结果为:
population
state city
CA San Francisco 883305
Los Angeles 3971883
多层次索引
对于多重索引,我们可以使用具有多个索引标签的元组对数据进行选择。例如,以下代码选择“NY”州的“Buffalo”城的人口数据:
print(df.loc[('NY', 'Buffalo')])
输出结果为:
population 259985
Name: (NY, Buffalo), dtype: int64
我们也可以使用提取器。以下代码选择来自所有州的前两个城市的人口数据:
print(df.loc[(slice(None), slice(None)), 'population'].groupby(level=0).head(2))
输出结果为:
state city
CA San Francisco 883305
Los Angeles 3971883
NY New York 8175133
Buffalo 259985
TX Houston 2296224
Dallas 1343573
在这个例子中,我们首先使用slice(None)提取了所有可能的第一列和第二列索引标签,然后仅使用“population”列,最后使用.groupby函数返回每个州的前两个城市的数据。
总结
本文介绍了Pandas中的多重索引,以及如何使用.loc和.iloc选择和切片单层和多层次索引数据。多重索引是处理多维数据集时非常有用的工具,可以帮助您更高效地检索数据。如果你想了解更多关于Pandas多重索引的知识,可以查看官方文档。
极客教程