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基础

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DataFrame的层次化索引是指在DataFrame中的行或列上使用多个索引级别来表示数据的一种结构。这种索引结构可以让我们在一个轴上拥有多个索引级别。 在构建DataFrame的层次化索引时,可以通过多种方法实现。一种方法是在导入数据时直接使用列名作为行索引,使用`index_col`参数来指定多个列作为索引。另一种方法是使用`set_index()`方法将某几列设置为索引。设置索引后,可以选择是否保留原始列作为DataFrame的一部分。而要将层次化索引转换为二维表格形式,可以使用`reset_index()`函数。 除了以上方法,还可以在创建DataFrame时直接指定多级索引,可以通过使用一个由列表或数组组成的列表作为索引来实现。例如,可以使用`pd.DataFrame()`函数的`index`参数来指定多级索引的值。 综上所述,DataFrame的层次化索引可以通过在导入数据时设置索引列,使用`set_index()`方法或在创建DataFrame时直接指定多级索引来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python学习笔记8——Series与DataFrame中的层次化索引](https://blog.csdn.net/weixin_44181744/article/details/105977700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pandas 层次化索引的实现方法](https://download.csdn.net/download/weixin_38679651/14914102)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值