Pandas-层次化索引


全文共401字,预计阅读时间5分钟


层次化索引是pandas的一项重要功能,它能使你在一个轴上有多个索引级别,也就是说,它能使你以低维度形式处理高维度数据,比如下面的代码:


data = pd.Series(np.random.randn(10),index=[['a','a','a','b','b','b','c','c','d','d'],[1,2,3,1,2,3,1,2,2,3]])
data
#输出

a  1    0.4979702   -0.0423773   -0.018719
b  1    0.0614122   -1.3138883    0.751478
c  1   -0.2413292   -1.945047
d  2    0.4607863   -0.411931
dtype: float64 data.index
#输出
MultiIndex(levels=[['a', 'b', 'c', 'd'], [1, 2, 3]],       labels=[[0, 0, 0, 1, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 1, 2]])


有了层次化索引之后,我们很容易的访问分块数据:


data['b']
#输出
1    0.061412
2   -1.313888
3    0.751478
dtype: float64 data[:,2]
#输出
a   -0.042377
b   -1.313888
c   -1.945047
d    0.460786
dtype: float64


层次化索引在数据重塑和基于分组的操作中扮演重要的角色。比如,上面的数据可以使用unstack方法重塑成为一个DataFrame:


data.unstack()
#输出
1   2   3
a   0.497970    -0.042377   -0.018719
b   0.061412    -1.313888   0.751478
c   -0.241329   -1.945047   NaN d   NaN 0.460786    -0.411931


unstack的逆运算是stack()


data.unstack().stack()
#输出
a  1    0.4979702   -0.0423773   -0.018719
b  1    0.0614122   -1.3138883    0.751478
c  1   -0.2413292   -1.945047
d  2    0.4607863   -0.411931
dtype: float64


DataFrame的行列索引都可以使用层次化索引:


frame = pd.DataFrame(np.arange(12).reshape((4,3)),index=[['a','a','b','b'],[1,2,1,2]],columns=[['Ohio','Ohio','Colorado'],['Green','Red','Green']])
frame
#输出
Ohio    Colorado
Green   Red Green
a   1   0   1   2
2   3   4   5
b   1   6   7   8
2   9   10  11


我们可以创建层次化索引MulitIndex:


index = pd.MultiIndex.from_arrays([['Ohio','Ohio','Colorado'],['Green','Red','Green']],names=['state','color'])
index

#输出
MultiIndex(levels=[['Colorado', 'Ohio'], ['Green', 'Red']],      
          labels=[[1, 1, 0], [0, 1, 0]],      
           names=['state', 'color'])frame.columns=indexframe

#输出
state   Ohio    Colorado
color   Green   Red Green
a   1   0   1   2
2   3   4   5
b   1   6   7   8
2   9   10  11


我们可以给我们的索引赋予名字:


frame.index.names=['key1','key2']
frame
#输出
state   Ohio    Colorado
color   Green   Red Green key1    key2            a   1   0   1   2
2   3   4   5
b   1   6   7   8
2   9   10  11


我们可以使用swaplevel交换两个索引的级别,swaplevel接受两个级别编号或者名称,并返回一个互换了级别的新对象:


frame.swaplevel('key1','key2')
#输出 state   Ohio    Colorado
color   Green   Red Green key2    key1            1   a   0   1   2
2   a   3   4   5
1   b   6   7   8
2   b   9   10  11


使用层次化索引时,sort_index中的level指定了根据哪个索引级别进行排序,sum等汇总统计函数中的level参数指定了根据哪个索引级别进行汇总统计:


frame.sort_index(level = 0)
frame.sum(level='key2')
frame.sum(level='color',axis=1)


原文链接:https://mp.weixin.qq.com/s?__biz=MzI1MzY0MzE4Mg==&mid=2247483787&idx=2&sn=6667a9cf3a5809d9aab5efb9e209dc7d&chksm=e9d0114adea7985cc41bb218a46d368ff243ad72188da83c22ead3962d5ebcd524b8ac62cba0&scene=21#wechat_redirect


查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org


请关注人工智能LeadAI公众号,查看更多专业文章

640?wx_fmt=jpeg

大家都在看

640.png?


LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

猜你喜欢

转载自blog.csdn.net/leadai/article/details/84985855