在Pandas中给多层索引降级的方法
# 背景介绍 通常我们不会在Pandas中主动设置多层索引,但是如果一个字段做多个不同的聚合运算, 比如sum, max这样形成的Column Level是有层次的,这样阅读非常方便,但是对编程定位比较麻烦. # 数据准备
import pandas as pd import numpy as np df = pd.DataFrame(np.arange(0, 14).reshape(7,2),columns =['a','b'] ) df.a = df.a %3 df['who'] = 'Bob' df.loc[df.a%4==0,'who'] = 'Alice'
a | b | who | |
---|---|---|---|
0 | 0 | 1 | Alice |
1 | 2 | 3 | Bob |
2 | 1 | 5 | Bob |
3 | 0 | 7 | Alice |
4 | 2 | 9 | Bob |
5 | 1 | 11 | Bob |
6 | 0 | 13 | Alice |
# 对一个字段同时用3个聚合函数
gp1 = df.groupby('who').agg({'b':[sum,np.max, np.min], 'a':sum}) gp1
b | a | |||
---|---|---|---|---|
sum | amax | amin | sum | |
who | ||||
Alice | 8.0 | 7.0 | 1.0 | 0 |
Bob | 28.0 | 11.0 | 3.0 | 6 |
索引是有层次的,虚要通过下面这种方式,个人感觉不是很方便.下面介绍2种方法来解决这个问题
#有层次的索引访问方法 gp1.loc['Bob', ('b', 'sum')]
28.0
# 直接去除一层
gp2 = gp1.copy(deep=True) gp2.columns = gp1.columns.droplevel(0) gp2
sum | amax | amin | sum | |
---|---|---|---|---|
who | ||||
Alice | 8.0 | 7.0 | 1.0 | 0 |
Bob | 28.0 | 11.0 | 3.0 | 6 |
# 把2层合并到一层
gp3 = gp1.copy(deep=True) gp3.columns = ["_".join(x) for x in gp3.columns.ravel()] gp3
b_sum | b_amax | b_amin | a_sum | |
---|---|---|---|---|
who | ||||
Alice | 8.0 | 7.0 | 1.0 | 0 |
Bob | 28.0 | 11.0 | 3.0 | 6 |
以上这篇在Pandas中给多层索引降级的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
pandas将DataFrame的列变成行索引的方法
pandas提供了set_index方法可以将DataFrame的列(多列)变成行索引,通过reset_index方法可以将层次化索引的级别会被转移到列里面. 1.DataFrame的set_index方法 data = pd.DataFrame(np.arange(1,10).reshape(3,3),index=["a","b","c"],columns=["A","B","C"])
-
浅谈pandas用groupby后对层级索引levels的处理方法
层及索引levels,刚开始学习pandas的时候没有太多的操作关于groupby,仅仅是简单的count.sum.size等等,没有更深入的利用groupby后的数据进行处理.近来数据处理的时候有遇到这类问题花了一点时间,所以这里记录以及复习一下:(以下皆是个人实践后的理解) 我使用一个实例来讲解下面的问题:一张数据表中有三列(动物物种.物种品种.品种价格),选出每个物种从大到小品种的前两种,最后只需要品种和价格这两列. 以上这张表是我们后面需要处理的数据表 (物种 品种 价格) levels
-
Pandas GroupBy对象 索引与迭代方法
如下所示: import pandas as pd df = pd.DataFrame({'性别' : ['男', '女', '男', '女', '男', '女', '男', '男'], '成绩' : ['优秀', '优秀', '及格', '差', '及格', '及格', '优秀', '差'], '年龄' : [15,14,15,12,13,14,15,16]}) GroupBy=df.groupby("性别") GroupBy.iter() GroupBy对象是一个迭代对象,每次迭代
-
对pandas的层次索引与取值的新方法详解
1.层次索引 1.1 定义 在某一个方向拥有多个(两个及两个以上)索引级别,就叫做层次索引. 通过层次化索引,pandas能够以较低维度形式处理高纬度的数据 通过层次化索引,可以按照层次统计数据 层次索引包括Series层次索引和DataFrame层次索引 1.2 Series的层次索引 import numpy as np import pandas as pd s1 = pd.Series(data=[99, 80, 76, 80, 99], index=[['2017', '2017',
-
pandas重新生成索引的方法
在数据处理的过程中,出现了这样的问题,筛选某些数据,出现索引从600多开始,但是我希望这行数据下标从0开始. 这个时候,我想到的是: df.reindex(range(length)) 但是查看一下数据之后,发现0-624之间的值全为Nan,显然不是我需要的数据. 最后找到了说明: pandas调用reindex方法后净会根据新索引进行重排,如果某个索引值当前不存在,就会引入 缺失值:可以通过fill_value参数填充默认值,也可以通过method参数设置填充方法: 感谢身边同事的帮助,找到了
-
pandas表连接 索引上的合并方法
如下所示: left1 = pd.DataFrame({'key':['a','b','a','a','b','c'],'value':range(6)}) right1 = pd.DataFrame({'group_val':[3.5,7]},index = ['a','b']) print(left1) print(right1) result = pd.merge(left1,right1,left_on='key',right_index=True) print(result) 层次化数
-
在Pandas中给多层索引降级的方法
# 背景介绍 通常我们不会在Pandas中主动设置多层索引,但是如果一个字段做多个不同的聚合运算, 比如sum, max这样形成的Column Level是有层次的,这样阅读非常方便,但是对编程定位比较麻烦. # 数据准备 import pandas as pd import numpy as np df = pd.DataFrame(np.arange(0, 14).reshape(7,2),columns =['a','b'] ) df.a = df.a %3 df['who'] = 'Bo
-
在pandas多重索引multiIndex中选定指定索引的行方法
在multiIndex中选定指定索引的行 我们在用pandas类似groupby来使用多重index时,有时想要对多个level中的某个index对应的行进行操作,就需要在dataframe中找到该index对应的行,在单层index中我们可以方便的使用df.loc[index]来选择,在多重Index中我们可以利用的类似的思路,然而其中也有一些小坑,记录如下. 1 index为有序的 1.1 创建测试数据 首先创建一个dataframe数据 df = pd.DataFrame({'class'
-
pandas中DataFrame重置索引的几种方法
在pandas中,经常对数据进行处理 而导致数据索引顺序混乱,从而影响数据读取.插入等. 小笔总结了以下几种重置索引的方法: import pandas as pd import numpy as np df = pd.DataFrame(np.arange(20).reshape((5, 4)),columns=['a', 'b', 'c', 'd']) #得到df: a b c d 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 3 12 13 14 15 4 16 17 1
-
pandas.dataframe按行索引表达式选取方法
需要把一个从csv文件里读取来的数据集等距抽样分割,这里用到了列表表达式和dataframe.iloc 先生成索引列表: index_list = ['%d' %i for i in range(df.shape[0]) if i % 3 == 0] 在dataframe中选取 sample_df = df.iloc[index_list] 合起来 sample_df = df.iloc[['%d' %i for i in range(df.shape[0]) if i % 3 == 0]] 各
-
Pandas中DataFrame交换列顺序的方法实现
一.获取DataFrame列标签 import pandas as pd file_path = '/Users/Arithmetic/da-rnn-master/data/collectd67_power_after_test_smooth.csv' dataset = pd.read_csv(file_path) cols = list(dataset) ['ps_state-stopped', 'ps_state-running', 'ps_state-blocked', 'ps_stat
-
Pandas中批量替换字符的六种方法总结
目录 一.前言 二.解决过程 方法一 方法二 方法三 方法四 方法五 方法六 三.总结 一.前言 前几天在Python最强王者群有个叫[dcpeng]的粉丝问了一个关于Pandas中的问题,这里拿出来给大家分享下,一起学习. 想问一下我有一列编码为1,2,3,4的数据,如何将1批量换为“开心”,2批量换为“悲伤”这种字符替换呢? 二.解决过程 思路挺简单,限定Pandas处理,想到的方法有很多,这里拿出来给大家分享,希望对大家的学习有帮助. 下面这个是生成源数据的代码: df = pd.Data
-
Pandas的MultiIndex多层索引使用说明
目录 MultiIndex多层索引 1.创建方式 1.1.第一种:多维数组 1.2.第二种:MultiIndex 2.多层索引操作 2.1.Series多层索引 2.2.DataFrame多层索引 2.3.交换索引 2.4.索引排序 2.5.索引堆叠 2.6.取消堆叠 2.7.设置索引 2.8.重置索引 MultiIndex多层索引 MultiIndex,即具有多个层次的索引,有些类似于根据索引进行分组的形式.通过多层次索引,我们就可以使用高层次的索引,来操作整个索引组的数据.通过给索引分类分组
-
在pandas中遍历DataFrame行的实现方法
有如下 Pandas DataFrame: import pandas as pd inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}] df = pd.DataFrame(inp) print df 上面代码输出: c1 c2 0 10 100 1 11 110 2 12 120 现在需要遍历上面DataFrame的行.对于每一行,都希望能够通过列名访问对应的元素(单元格中的值).也就是说,需要类
-
python pandas创建多层索引MultiIndex的6种方式
目录 引言 pd.MultiIndex.from_arrays() pd.MultiIndex.from_tuples() 列表和元组是可以混合使用的 pd.MultiIndex.from_product() pd.MultiIndex.from_frame() groupby() pivot_table() 引言 在上一篇文章中介绍了如何创建Pandas中的单层索引,今天给大家带来的是如何创建Pandas中的多层索引. pd.MultiIndex,即具有多个层次的索引.通过多层次索引,我们就可
-
pandas多层索引的创建和取值以及排序的实现
多层索引的创建 普通-多个index创建 在创建数据的时候加入一个index列表,这个index列表里面是多个索引列表 Series多层索引的创建方法 import pandas as pd s = pd.Series([1,2,3,4,5,6],index=[['张三','张三','李四','李四','王五','王五'], ['期中','期末','期中','期末','期中','期末']]) # print(s) s 张三 期中 1 期末 2 李四 期中 3
随机推荐
- jquery一键控制checkbox全选、反选或全不选
- SWT(JFace)体验之Sash(活动控件)
- asp.net 关于字符串内范围截取的一点方法总结
- JavaScript.Encode手动解码技巧
- c#完美截断字符串代码(中文+非中文)
- 15个非常实用的JavaScript代码片段
- PHP7安装Redis扩展教程【Linux与Windows平台】
- Java微信二次开发(一) Java微信请求验证功能
- Apache No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed
- 鼠标图片振动代码
- BootStrap下拉菜单和滚动监听插件实现代码
- jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
- javascript实现显示和隐藏div方法汇总
- 深入理解JAVA中的聚集和组合的区别与联系
- c#使用wmi查询usb设备信息示例
- 浅谈python配置与使用OpenCV踩的一些坑
- Linux下mysql 8.0安装教程
- 使用IDEA工具配置和运行vue项目及遇到的坑
- JDBC实现学生管理系统
- PHP树形结构tree类用法示例