Pandas基本功能之层次化索引及层次化汇总
层次化索引
层次化也就是在一个轴上拥有多个索引级别
Series的层次化索引
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
a 1 0.965999
2 -0.271733
3 0.133910
b 1 -0.806885
2 -0.622905
3 -0.355330
c 1 -0.659194
2 -1.082872
d 2 -0.043984
3 -1.125324
dtype: float64
# 选取数据子集
data['b']
1 -0.806885
2 -0.622905
3 -0.355330
dtype: float64
data['b':'c'] # 在pandas中顾头也顾尾
b 1 -0.806885
2 -0.622905
3 -0.355330
c 1 -0.659194
2 -1.082872
dtype: float64
data.ix[['b','d']] # 按行索引名称选择
b 1 -0.806885
2 -0.622905
3 -0.355330
d 2 -0.043984
3 -1.125324
dtype: float64
# 在内层中进行选取,选择所有的行索引中的2这一行
data[:,2]
a -0.271733
b -0.622905
c -1.082872
d -0.043984
dtype: float64
# 层次化索引在数据重塑和基于分组的操作中扮演着重要的角色
# 这个函数会把层次化索引转为DataFrame格式,最外层的行索引作为DataFrame的行索引,内层的索引作为列索引
data.unstack()
1 2 3
a 0.965999 -0.271733 0.133910
b -0.806885 -0.622905 -0.355330
c -0.659194 -1.082872 NaN
d NaN -0.043984 -1.125324
# unstack()的逆运算,转回来
data.unstack().stack()
a 1 0.965999
2 -0.271733
3 0.133910
b 1 -0.806885
2 -0.622905
3 -0.355330
c 1 -0.659194
2 -1.082872
d 2 -0.043984
3 -1.125324
dtype: float64
DataFrame的层次化索引
frame = pd.DataFrame(np.arange(12).reshape(4,3),index=[['a','a','b','b'],[1,2,1,2]],
columns=[['ohio','ohio','color'],['green','red','green']]
)
frame
ohio 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.columns.names = ['state','color']
frame
state ohio color
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']
color green red
key1 key2
a 1 0 1
2 3 4
b 1 6 7
2 9 10
重排分级顺序
frame
state ohio color
color green red green
key1 key2
a 1 0 1 2
2 3 4 5
b 1 6 7 8
2 9 10 11
# 这里sortlevel()括号里的0指把key2和key1交换后按key2排序
frame.swaplevel(0,1).sortlevel(0)
state ohio color
color green red green
key2 key1
1 a 0 1 2
b 6 7 8
2 a 3 4 5
b 9 10 11
# 1指按key1排序
frame.swaplevel(0,1).sortlevel(1)
state ohio color
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
根据层次索引级别汇总统计
frame
state ohio color
color green red green
key1 key2
a 1 0 1 2
2 3 4 5
b 1 6 7 8
2 9 10 11
# 以key2的1和1相加,2和2索引相加
frame.sum(level='key2')
state ohio color
color green red green
key2
1 6 8 10
2 12 14 16
# 以行索引的green索引相加,red没有不做改变
frame.sum(level='color',axis=1)
color green red
key1 key2
a 1 2 1
2 8 4
b 1 14 7
2 20 10
使用DataFrame的列
frame1 = pd.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]
})
frame1
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
#把c/d设置为行索引,默认会删除这两列,如果不想删除,可以吧drop=False开启
frame1.set_index(['c','d'])
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
# reset_index会把cd设置为列索引,了解就行
frame2.reset_index()
index a b c d
0 0 0 7 one 0
1 1 1 6 one 1
2 2 2 5 one 2
3 3 3 4 two 0
4 4 4 3 two 1
5 5 5 2 two 2
6 6 6 1 two 3
Pandas基本功能之层次化索引及层次化汇总的更多相关文章
- Pandas基本功能之选取索引和过滤
索引.选取和过滤 大部分的查询用法 类型 说明 obj[val] 选取DataFrame的单个列或一组列 obj.ix[val] 选取DataFrame的单个行或一组行 obj.ix[:,val] 选 ...
- pandas:由列层次化索引延伸的一些思考
1. 删除列层次化索引 用pandas利用df.groupby.agg() 做聚合运算时遇到一个问题:产生了列方向上的两级索引,且需要删除一级索引.具体代码如下: # 每个uesr每天消费金额统计:和 ...
- pandas(五)处理缺失数据和层次化索引
pandas用浮点值Nan表示浮点和非浮点数组中的缺失数据.它只是一个便于被检测的标记而已. >>> string_data = Series(['aardvark','artich ...
- pandas中层次化索引与切片
Pandas层次化索引 1. 创建多层索引 隐式索引: 常见的方式是给dataframe构造函数的index参数传递两个或是多个数组 Series也可以创建多层索引 Series多层索引 B =Ser ...
- (三)pandas 层次化索引
pandas层次化索引 1. 创建多层行索引 1) 隐式构造 最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组 Series也可以创建多层索引 import numpy ...
- 利用Python进行数据分析(11) pandas基础: 层次化索引
层次化索引 层次化索引指你能在一个数组上拥有多个索引,例如: 有点像Excel里的合并单元格对么? 根据索引选择数据子集 以外层索引的方式选择数据子集: 以内层索引的方式选择数据: 多重索引S ...
- 利用Python进行数据分析_Pandas_层次化索引
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 层次化索引主要解决低纬度形式处理高纬度数据的问题 import pandas ...
- 关于groupby与层次化索引的联系和层次化标签的使用
groupby出来对象并不是dataFrame,所以直接print是看不到矩阵或者高维矩阵的,所以需要用能够产生标量值的方法去处理groupby对象,这样可以利用矩阵形式处理高维数据: 这样group ...
- pandas小记:pandas高级功能
http://blog.csdn.net/pipisorry/article/details/53486777 pandas高级功能:面板数据.字符串方法.分类.可视化. 面板数据 {pandas数据 ...
随机推荐
- java中 BeanUtils.copyProperties的用法
BeanUtils提供了对java发射和自省API的包装,这里对BeanUtils.copyProperties的用法做一个小小的介绍. 通过函数名可以知道,copyProperties函数是对属性进 ...
- MongoTemplate的使用
参考: https://www.cnblogs.com/ityouknow/p/6828919.html
- ES6 模块导入import 导出export 和module.export
ES6中新增了模块的导入和导出功能 在实际过程中可以使用 import 和 export 对模块进行导入和导出操作,具体如下 1. 名字导入/导出 (导入名字必须与导出的一致,导入时需要用花括号) ...
- 使用STM32的USART的同步模式Synchronous调戏SPI[2] 【实现spi 9bit】
[原创出品§转载请注明出处] 出处:http://www.cnblogs.com/libra13179/p/7064533.html 上回说道使用USART的来模拟SPI通讯.说说一下我什么写这个的原 ...
- Django models模型(1)
1)使用模型需要在INSTALLED_APPS中注册 2)模型字段(字段类型和字段选项) 1.字段类型 常用: CharField,TextField: 对应字符串对象 DateTimeField和D ...
- 机器学习进阶-图像形态学变化-礼帽与黑帽 1.cv2.TOPHAT(礼帽-原始图片-开运算后图片) 2.cv2.BLACKHAT(黑帽 闭运算-原始图片)
1.op = cv2.TOPHAT 礼帽:原始图片-开运算后的图片 2. op=cv2.BLACKHAT 黑帽: 闭运算后的图片-原始图片 礼帽:表示的是原始图像-开运算(先腐蚀再膨胀)以后的图像 ...
- JSdom操作内容,样式,属性
<p> JavaScript 能够直接写入 HTML 输出流中: </p> <script> document.write("<h1>This ...
- idea 自动导入包和自动将没用的包去除
加快开发效率,除去没用的包,洁癖者必用! 这样设置,就可以自动导入包以及除去没有用到的包
- C#--构造函数的理解
说白了构造函数就是用来初始化类的数据成员{因为C#语言具有类型安全的特质-->不能使用没有初始化的变量)} 在这里引用一下别人的总结,我觉得挺好的: 构造函数是一种特殊的成员函数,它主要用于为对 ...
- Tomcat虚拟目录设置
ssh $host "rm -fr /var/www/$tomcat_name/webapps/*" 远程分发war包部署tomcat项目时,需要先清除项目目录. -------- ...