pandas多层索引的创建和取值以及排序的实现
在处理多维数据时,使用pandas的多层索引(multi-index)是非常有效的。在本文中,我们将讨论如何创建、取值和排序多层索引。
创建多层索引
Pandas中主要有两种方式来创建多层索引:DataFrame中的set_index()方法,以及index中的MultiIndex()方法:
DataFrame中的set_index方法创建多层索引
import pandas as pd
df = pd.DataFrame({
'City': ['Beijing', 'Beijing', 'Shanghai', 'Shanghai'],
'Year': [2016, 2017, 2016, 2017],
'Population': [2100, 2300, 1600, 1700]
})
df.set_index(['City', 'Year'], inplace=True)
在上面的样例中,我们首先构造了一个简单的DataFrame,其中包含了城市、年份和人口。然后使用set_index()方法将“城市”和“年份”这两列作为多层索引。
Index中的MultiIndex方法创建多层索引
我们还可以使用MultiIndex()方法手动创建多层索引:
import pandas as pd
index = pd.MultiIndex.from_product([['Beijing', 'Shanghai'], [2016, 2017]], names=['City', 'Year'])
df = pd.DataFrame({
'Population': [2100, 2300, 1600, 1700]
}, index=index)
在上面的样例中,我们手动生成了两个城市(北京、上海)和两个年份(2016、2017)的所有组合,然后使用这个多层索引构造了一个DataFrame。
取值和切片
在多层索引的情况下,我们需要使用元组来指定每个维度的取值。例如,如果要取出“北京市2016年”的人口,可以使用如下方式:
df.loc[('Beijing', 2016), 'Population']
如果要取出所有“北京市”的数据,可以使用partial indexing:
df.loc['Beijing']
如果要取出所有2016年的数据,使用IndexSlice:
idx = pd.IndexSlice
df.loc[idx[:, 2016], :]
在上面的样例中,我们使用IndexSlice切片取出了所有2016年的数据。
排序
为了排序多层索引,可以使用sort_index()方法:
df.sort_index(inplace=True)
默认情况下,sort_index()方法会按照最外层维度排序。如果要按照其他维度排序,可以在sort_index方法中指定level参数:
df.sort_index(level='Year', inplace=True)
在上面的样例中,我们按照“年份”这一维度进行排序,结果为:
Population
City Year
Beijing 2016 2100
2017 2300
Shanghai 2016 1600
2017 1700
除了level参数,sort_index()方法还支持其他参数,如ascending、na_position等。
以上就是pandas多层索引的创建和取值以及排序的实现的完整攻略了。
示例说明
示例1:使用set_index方法创建多层索引
import pandas as pd
df = pd.DataFrame({
'City': ['Beijing', 'Beijing', 'Shanghai', 'Shanghai'],
'Year': [2016, 2017, 2016, 2017],
'Population': [2100, 2300, 1600, 1700]
})
df.set_index(['City', 'Year'], inplace=True)
在这个示例中,我们首先创建了一个DataFrame,然后使用set_index方法将“城市”和“年份”这两列作为多层索引。最终的结果如下:
Population
City Year
Beijing 2016 2100
2017 2300
Shanghai 2016 1600
2017 1700
示例2:使用MultiIndex方法手动创建多层索引
import pandas as pd
index = pd.MultiIndex.from_product([['Beijing', 'Shanghai'], [2016, 2017]], names=['City', 'Year'])
df = pd.DataFrame({
'Population': [2100, 2300, 1600, 1700]
}, index=index)
在这个示例中,我们手动生成了两个城市和两个年份的所有组合,并使用这个多层索引构造了一个DataFrame。最终的结果如下:
Population
City Year
Beijing 2016 2100
2017 2300
Shanghai 2016 1600
2017 1700
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas多层索引的创建和取值以及排序的实现 - Python技术站