什么是分层索引?
分层索引是Pandas的重要特性,它允许你在一个轴向上(行、列)拥有多个索引层级。
举一个简单的例子:
data=pd.Series(np.random.randn(9),index=[['a','a','a','b','b','c','c','d','d'],
[1,2,3,1,3,1,2,2,3]])
print(data)
print(data.index)
以上构建的 Series 即为以 MultiIndex 作为索引。此处的行索引是双层索引,可以使用 level 0 和 level 1 分别来代表。
为什么需要用分层索引?
分层索引提供了一种,在更低维度的形式中处理更高维度数据的方式。
啥意思呢,简单举例来说,假设现在你有一个列数很多的DataFrame,有了分层索引功能(当然还要配合下面会讲到的分层索引中的stack方法),你就可以把众多的列转换为index,从而将一个多列的DataFrame转换为一个分层索引的Series。
分层索引具体能干什么,怎么使用?
- 通过分层索引,可以选择出数据的子集
data['b']
data[‘b’:‘d’] #包含末尾
data.loc [ [ ‘b’,‘d’ ] ]
- 重塑数据
多层索引再DataFrame中提供了一种一致性方式用于重排列数据,以下是两个基础操作:
stack(堆叠) :将列中的数据透视到行
unstack(拆堆):将行中的数据透视到列
使用unstack方法将数据重排列后放入一个DataFrame中:
data.unstack()
在这份数据上使用stack方法会将列透视到行,产生一个新的Series:
data.unstack().stack()
默认情况下,堆叠和拆堆的操作是可逆的。
当在DataFrame中拆堆时,被拆堆的层级会变为结果中最低的层级。
3. 重排序和层级排序
有时候,我们需要重新排列轴上的层级顺序,或者按照特定层级的值对数据进行排序。
重排序
swaplevel方法可以接收两个层级的序号或者层级的名称,返回一个进行了层级变更的新对象。
单一层级数据排序
sort_index可以在单一层级上对数据进行排序。
-
按照层级进行汇总统计
DataFrame和Series的很多描述性和汇总性统计中,会有一个level选项,通过level选项你可以指定你想要在某个特定的轴上进行聚合。(使用了pandas的groupby机制)
-
使用DataFrame的列进行索引(set_index,reset_index函数)
set_index函数会生成一个新的DataFrame,新的DataFrame使用一个或多个列作为索引:
reset_index的功能跟set_index刚好相反,层次化索引的级别会 被转移到列⾥
把列做下排序:
总结:以上是分层索引功能的一些理论知识,后面的文章会再用案例来展示,分层索引如何在实际问题的解决中发挥作用。
有任何疑问欢迎在留言区里和我讨论,互相学习!如果有帮助到你,也麻烦点点赞哦~