pandas--层次化索引
- data=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
- Out[6]:
- a 1 -2.842857
- 2 0.376199
- 3 -0.512978
- b 1 0.225243
- 2 -1.242407
- 3 -0.663188
- c 1 -0.149269
- 2 -1.079174
- d 2 -0.952380
- 3 -1.113689
- dtype: float64
这就是带MultiIndex索引的Series的格式化输出形式。索引之间的“间隔”表示“直接使用上面的标签”。
- data.index
- Out[7]:
- 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']
- Out[8]:
- 1 0.225243
- 2 -1.242407
- 3 -0.663188
- dtype: float64
- data['b':'c']
- Out[10]:
- b 1 0.225243
- 2 -1.242407
- 3 -0.663188
- c 1 -0.149269
- 2 -1.079174
- dtype: float64
- data.ix[['b','d']]
- __main__:1: DeprecationWarning:
- .ix is deprecated. Please use
- .loc for label based indexing or
- .iloc for positional indexing
- See the documentation here:
- http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated
- Out[11]:
- b 1 0.225243
- 2 -1.242407
- 3 -0.663188
- d 2 -0.952380
- 3 -1.113689
- dtype: float64
甚至可以在“内层”中进行选取:
- data[:,2]
- Out[12]:
- a 0.376199
- b -1.242407
- c -1.079174
- d -0.952380
- dtype: float64
- data.unstack()
- Out[13]:
- 1 2 3
- a -2.842857 0.376199 -0.512978
- b 0.225243 -1.242407 -0.663188
- c -0.149269 -1.079174 NaN
- d NaN -0.952380 -1.113689
- #unstack的逆运算是stack
- data.unstack().stack()
- Out[14]:
- a 1 -2.842857
- 2 0.376199
- 3 -0.512978
- b 1 0.225243
- 2 -1.242407
- 3 -0.663188
- c 1 -0.149269
- 2 -1.079174
- d 2 -0.952380
- 3 -1.113689
- dtype: float64
对于DataFrame,每条轴都可以有分层索引:
- frame=DataFrame(np.arange(12).reshape((4,3)),
- index=[['a','a','b','b'],[1,2,1,2]],
- columns=[['Ohio','Ohio','Colorado'],
- ['Green','Red','Green']])
- frame
- Out[16]:
- Ohio Colorado
- 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.columns.names=['state','color']
- frame
- Out[22]:
- 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
由于有了分部的列索引,可以轻松选取列分组:
- frame['Ohio']
- Out[23]:
- color Green Red
- key1 key2
- a 1 0 1
- 2 3 4
- b 1 6 7
- 2 9 10
- frame.swaplevel('key1','key2')
- Out[24]:
- 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
sortlevel则根据单个级别中的值对数据进行排序。交换级别时,常用得到sortlevel,这样最终结果也是有序的了:
- frame.swaplevel(0,1)
- Out[27]:
- 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
- #交换级别0,1(也就是key1,key2)
- #然后对axis=0进行排序
- frame.swaplevel(0,1).sortlevel(0)
- __main__:1: FutureWarning: sortlevel is deprecated, use sort_index(level= ...)
- Out[28]:
- state Ohio Colorado
- color Green Red Green
- key2 key1
- 1 a 0 1 2
- b 6 7 8
- 2 a 3 4 5
- b 9 10 11
- frame.sum(level='key2')
- Out[29]:
- state Ohio Colorado
- color Green Red Green
- key2
- 1 6 8 10
- 2 12 14 16
- frame.sum(level='color',axis=1)
- Out[30]:
- color Green Red
- key1 key2
- a 1 2 1
- 2 8 4
- b 1 14 7
- 2 20 10
- frame=DataFrame({'a':range(7),'b':range(7,0,-1),
- 'c':['one','one','one','two','two','two','two'],
- 'd':[0,1,2,0,1,2,3]})
- frame
- Out[32]:
- a b c d
- 0 0 7 one 0
- 1 1 6 one 1
- 2 2 5 one 2
- 3 3 4 two 0
- 4 4 3 two 1
- 5 5 2 two 2
- 6 6 1 two 3
DataFrame的set_index函数会将其一个或多个列转换为行索引,并创建一个新的DataFrame:
- frame2=frame.set_index(['c','d'])
- frame2
- Out[34]:
- a b
- c d
- one 0 0 7
- 1 1 6
- 2 2 5
- two 0 3 4
- 1 4 3
- 2 5 2
- 3 6 1
默认情况下,那些列会从DataFrame中移除,但也可以将其保留下来:
- frame.set_index(['c','d'],drop=False)
- Out[35]:
- a b c d
- c d
- one 0 0 7 one 0
- 1 1 6 one 1
- 2 2 5 one 2
- two 0 3 4 two 0
- 1 4 3 two 1
- 2 5 2 two 2
- 3 6 1 two 3
reset_index的功能和set_index刚好相反,层次化索引的级别会被转移到列里面:
- frame2.reset_index()
- Out[36]:
- c d a b
- 0 one 0 0 7
- 1 one 1 1 6
- 2 one 2 2 5
- 3 two 0 3 4
- 4 two 1 4 3
- 5 two 2 5 2
- 6 two 3 6 1
pandas--层次化索引的更多相关文章
- (三)pandas 层次化索引
pandas层次化索引 1. 创建多层行索引 1) 隐式构造 最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组 Series也可以创建多层索引 import numpy ...
- pandas中层次化索引与切片
Pandas层次化索引 1. 创建多层索引 隐式索引: 常见的方式是给dataframe构造函数的index参数传递两个或是多个数组 Series也可以创建多层索引 Series多层索引 B =Ser ...
- Pandas基本功能之层次化索引及层次化汇总
层次化索引 层次化也就是在一个轴上拥有多个索引级别 Series的层次化索引 data=Series(np.random.randn(10),index=[ ['a','a','a','b','b', ...
- pandas:由列层次化索引延伸的一些思考
1. 删除列层次化索引 用pandas利用df.groupby.agg() 做聚合运算时遇到一个问题:产生了列方向上的两级索引,且需要删除一级索引.具体代码如下: # 每个uesr每天消费金额统计:和 ...
- pandas(五)处理缺失数据和层次化索引
pandas用浮点值Nan表示浮点和非浮点数组中的缺失数据.它只是一个便于被检测的标记而已. >>> string_data = Series(['aardvark','artich ...
- 利用Python进行数据分析(11) pandas基础: 层次化索引
层次化索引 层次化索引指你能在一个数组上拥有多个索引,例如: 有点像Excel里的合并单元格对么? 根据索引选择数据子集 以外层索引的方式选择数据子集: 以内层索引的方式选择数据: 多重索引S ...
- 利用Python进行数据分析_Pandas_层次化索引
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 层次化索引主要解决低纬度形式处理高纬度数据的问题 import pandas ...
- pandas重置索引的几种方法探究
pandas重置索引的几种方法探究 reset_index() reindex() set_index() 函数名字看起来非常有趣吧! 不仅如此. 需要探究. http://nbviewer.jupy ...
- 关于groupby与层次化索引的联系和层次化标签的使用
groupby出来对象并不是dataFrame,所以直接print是看不到矩阵或者高维矩阵的,所以需要用能够产生标量值的方法去处理groupby对象,这样可以利用矩阵形式处理高维数据: 这样group ...
- pandas 数据索引与选取
我们对 DataFrame 进行选择,大抵从这三个层次考虑:行列.区域.单元格.其对应使用的方法如下:一. 行,列 --> df[]二. 区域 --> df.loc[], df.ilo ...
随机推荐
- arcpy-栅格转其他格式
import arcpy in_format=arcpy.GetParameterAsText(0) out_format=arcpy.GetParameterAsText(1) out_folder ...
- git拉取远程所有分支
第一步: git branch -r | grep -v '->' | while read remote; do git branch --track "${remote#origi ...
- LeetCode Array Easy 122. Best Time to Buy and Sell Stock II
Description Say you have an array for which the ith element is the price of a given stock on day i. ...
- web集群和分布式服务以及消息补偿机制几种方案
一.为什么要集群? 1.JavaEE项目,如果部署在一台Tomcat上,所有的请求,都由这一台服务器处理,存在很大风险: A:并发处理能力有限(一般单台服务器处理的并发量为250左右,超过250,可能 ...
- zookeeper常用配置详解
#ZK中的一个时间单元.ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的.例如,session的最小超时时间是2*tickTime tickTime=2000 #Follower在启动过程中, ...
- java多线程并发面试题
1.多线程有什么用? (1)发挥多核CPU的优势 随着工业的进步,现在的笔记本.台式机乃至商用的应用服务器至少也都是双核的,4核.8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪 ...
- Java中的内部类怎么用
一.为什么需要内部类?java内部类有什么好处?为什么需要内部类? 首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时 ...
- OpenSearch最新功能介绍
摘要:阿里云开放搜索(OpenSearch)是一款结构化数据搜索托管服务,其能够提供简单.高效.稳定.低成本和可扩展的搜索解决方案.OpenSearch以平台服务化的形式,将专业搜索技术简单化.低门槛 ...
- 树分基础 bzoj 1468
我们对于一棵树,我们找一个根,然后统计过这个点的路径有多少符合要求.怎么搞呢?我们可以先维护一个数据结构,然后把先把根作为一个距离自己为0的点放进去,然后对于每一棵子树,先找出所有的与之前的数据结构的 ...
- Tyvj 1518 CPU监控(线段树)
题目描述: Bob需要一个程序来监视CPU使用率.这是一个很繁琐的过程,为了让问题更加简单,Bob会慢慢列出今天会在用计算机时做什么事. Bob会干很多事,除了跑暴力程序看视频之外,还会做出去玩玩和用 ...