python pandas库——pivot使用心得
python pandas库——pivot使用心得
最近在做基于python的数据分析工作,引用第三方数据分析库——pandas(version 0.16)。
在做数据统计二维表转换的时候走了不少弯路,发现pivot()这个方法可以解决很多问题,让我少走一些弯路,节省了大量的代码。于是我这里对于pandas下dataframe的pivot()方法进行学习总结和应用,以便回顾和巩固知识。
以统计学生成绩信息为例。
在做学生成绩信息统计的时候,我们从学生各科考试成绩文件(.csv或.xls等)中把数据抽取上来。样本模拟数据(data_df)如下。
In [13]: print data_df
userNum score subjectCode subjectName userName
0 001 90 01 语文 张三
1 002 96 01 语文 李四
2 003 93 01 语文 王五
3 001 87 02 数学 张三
4 002 82 02 数学 李四
5 003 80 02 数学 王五
要把上面二维表转换为每个人各科的成绩信息。就像咱们中学时期的成绩单一样。类似于
学籍号 姓名 班级 语文成绩 语文排名 数学成绩 数学排名
...
的一张二维表。
我之前的传统统计方式,给data_df根据学籍号进行groupby,再循环遍历该分组得到每个人的各科成绩信息,再统计到一张新表中,然后循环append每一张新表,可生成以上的样表。如果我们需要统计全年级的学生呢?可能一个年级有500个学生,那就是循环500次。此时我们需要统计一个市区内多校联考的学生呢?岂不是要循环成百上千次?实际情况,这样的做法使得我们的脚本跑的非常的慢。
直到我在pandas的官方api上查到pivot()的这个方法。
大概的意思就是根据列对数据表进行重塑。这样理解实在晦涩难懂。我不喜欢长篇大论,更喜欢暴力一点的,use it and 直观感受它(这样做当然不可取,最好还是对它的方法理解透彻一些,以便了解他更多的适用场景)。
从官方api可以知道他有三个参数,第一个index是重塑的新表的索引名称是什么,第二个columns是重塑的新表的列名称是什么,一般来说就是被统计列的分组,第三个values就是生成新列的值应该是多少,如果没有,则会对data_df剩下未统计的列进行重新排列放到columns的上层。
直接上代码
In [20]: pivot_df = data_df.pivot(index='userNum', columns='subjectCode', values='score')
我们给能标识每个学生的学籍号userNum作为索引,因为我们是要统计每个学生,所以每个学生的信息作为一行。要生成语文成绩,数学成绩等,那么可以用标识学科的subjectCode作为每一列,最后,值,当然就是score给每个科目赋成绩值了!
以下是生成的结果
In [21]: print pivot_df
subjectCode 01 02
userNum
001 90 87
002 96 82
003 93 80
这就生成了我们大致想要的样子了,之后可以再给pivot_df的列名进行调整,还有其整体样式的调整。
# 这只是其中一个方式,如有更好的方式,不吝赐教~
# 列名称置空
pivot_df.columns.name = None
# 遍历每个学科对新表列名进行修改
data_df_G = data_df.groupby(["subjectCode"], as_index=False)
temp_count = 1
for index, subject_df in data_df_G:
# 把成绩排名添加到各科成绩之后
pivot_df.insert(temp_count, "rank_" + str(index), pivot_df[index].rank(ascending=False, method='min'))
# 重命名各科成绩
pivot_df.rename(columns={index: ("score_" + str(index))}, inplace=True)
temp_count += 2
# 把userNum添加的列中
pivot_df['userNum'] = pivot_df.index
# 索引名称置空
pivot_df.index.name = None
temp_df = data_df.loc[:, ["userNum", "userName"]]
temp_df.drop_duplicates(inplace=True)
# 剩余列拼接
pivot_df = temp_df.merge(pivot_df, on="userNum", how="left")
最后生成的样式,大致能满足我们需要的东西了
In [30]: print(pivot_df)
userNum userName score_01 rank_01 score_02 rank_02
0 001 张三 90 3 87 1
1 002 李四 96 1 82 2
2 003 王五 93 2 80 3
python pandas库——pivot使用心得的更多相关文章
- Python Pandas库的学习(三)
今天我们来继续讲解Python中的Pandas库的基本用法 那么我们如何使用pandas对数据进行排序操作呢? food.sort_values("Sodium_(mg)",inp ...
- Python——Pandas库入门
一.Pandas库介绍 Pandas是Python第三方库,提供高性能易用数据类型和分析工具 import pandas as pd Pandas基于NumPy实现,常与NumPy和Matplotli ...
- Python pandas库159个常用方法使用说明
Pandas库专为数据分析而设计,它是使Python成为强大而高效的数据分析环境的重要因素. 一.Pandas数据结构 1.import pandas as pd import numpy as np ...
- Python Pandas库 初步使用
用pandas+numpy读取UCI iris数据集中鸢尾花的萼片.花瓣长度数据,进行数据清理,去重,排序,并求出和.累积和.均值.标准差.方差.最大值.最小值
- Python Pandas库的学习(一)
今天我们来学习一下Pandas库,前面我们讲了Numpy库的学习 接下来我们学习一下比较重要的库Pandas库,这个库比Numpy库还重要 Pandas库是在Numpy库上进行了封装,相当于高级Num ...
- Python Pandas库的学习(二)
今天我们继续讲下Python中一款数据分析很好的库.Pandas的学习 接着上回讲到的,如果有人听不懂,麻烦去翻阅一下我前面讲到的Pandas学习(一) 如果我们在数据中,想去3,4,5这几行数据,那 ...
- Python Pandas 库的使用例子
主要在jupyter notebook里面熟悉这个库的使用,它的安装方法与实现,可自行搜索. Pandas是一个优秀的数据分析工具,官网:http://pandas.pydata.org/ 相关的库使 ...
- python pandas库的基本内容
pandas主要为数据预处理 DataFrame import pandas food_info = pandas.read_csv("路径") #绝对路径和相对路径都可以 ty ...
- Python 基础教程 —— Pandas 库常用方法实例说明
目录 1. 常用方法 pandas.Series 2. pandas.DataFrame ([data],[index]) 根据行建立数据 3. pandas.DataFrame ({dic}) ...
随机推荐
- 【HTML5】HTML5 综合
HTML5教程: 视频教程:http://www.socss.cn/html5视频教程大集合/ DCloud关于HTML5:http://ask.dcloud.net.cn/docs 开发工具:HBu ...
- master.dbo.spt_values
,@date)) /*day--------------------200911012009110220091103200911042009110520091106200911072009110820 ...
- React学习笔记 - 组件&Props
React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...
- Struts2学习-拦截器2续
定义拦截器有2种办法:1.实现Interceptor接口2.集成AbstractInterceptor抽象类 一.方法1 ..... <struts> <package name=& ...
- dedecms 去掉栏目页的预览功能
首先找到include/typeunit.class.admin.php 再找到 ListAllType 方法,该方法的功能是“读出所有分类” 找到并将该方法内的所以以下代码注释或者删除”<a ...
- Win+Tab键实现自定义程序列表间的窗口切换
程序是用AutoHotkey语言写的, 说明: 以自己使用频率的顺序在ExeList自定义的程序间切换 切换可以以所有窗口切换,也可以按程序组切换(比如在word窗口间切换) 程序组可以分别定义排除的 ...
- pip下载太慢解决方法
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade tensorflow 用清华的镜像下载会快很多.
- sql 2008 远程过程调用失败 0x800706be
啊哦,SQL Server挂了!sql 2008 远程过程调用失败 0x800706be,找了一下解决方案,如下: 1.打开控制面板->添加删除程序 2.卸载一个叫Microsoft SQL S ...
- thrift基本概念和实例
一.thrift可以做什么 thrift是一个跨语言通信的工具,支持的语言多,而且还提供服务器端的众多网络模型,使服务端的开发可以只专于服务本身的逻辑. 二.thrift重要概念 1.processo ...
- C++11新特性之 std::forward(完美转发)
我们也要时刻清醒,有时候右值会转为左值,左值会转为右值. (也许“转换”二字用的不是很准确) 如果我们要避免这种转换呢? 我们需要一种方法能按照参数原来的类型转发到另一个函数中,这才完美,我们称之为完 ...