Pandas实现DataFrame的简单运算、统计与排序


Posted in Python onMarch 31, 2022

在前面的章节中,我们讨论了Series的计算方法与Pandas的自动对齐功能。不光是Series,DataFrame也是支持运算的,而且还是经常被使用的功能之一。

由于DataFrame的数据结构中包含了多行、多列,所以DataFrame的计算与统计可以是用行数据或者用列数据。为了更方便我们的使用,Pandas为我们提供了常用的计算与统计方法:

操作 方法 操作 方法
求和 sum 最大值 max
求均值 mean 最小值 min
求方差 var 标准差 std
中位数 median 众数 mode
分位数 quantile    

一.运算

接上文的例子,我们已经有了N个学生的数学、语文、英语的成绩表,现在,我们要算出每个学生的总成绩,那么我们就可以用以下的方法:

'''
行的求和以下演示两种方法:
方法1:先把待求和的列数据删选出来(剔除掉name列),然后使用sum函数求和
方法2:把待求和的列一个一个选出来然后使用运算符求和
两种方法最后的结果为像原有的DataFrame中新增一列,数据为每行数据的求和
'''
df['sum'] = df[['chinese', 'math', 'english']].sum(1)	#方法1

df['sum'] = df['chinese'] + df['math'] + df['english']	#方法2

Output:
        name  chinese  english  math  sum
0   XiaoMing       99      100    80  279
1      LiHua      102       79    92  273
2  HanMeiNei      111      130   104  345

在sum方法中我们传入了参数1,代表的是我们使用的轴(axis)为行(对行数据进行求和),如果想要计算出每列的求和我们只用传入0即可(sum函数默认参数为0,所以也可不传):

df[['chinese', 'math', 'english']].sum(0)

Output:
chinese    312
math       276
english    309
dtype: int64

现在有了总成绩,那么数学老师或者语文老师就会关心本班学生的数据平均分是多少,同样的,我们可以非常快速的计算出来:

df['math'].mean()		#方法一:直接使用Pandas提供的mean求均值方法

df['math'].sum() / df.shape[0]	#方法二:使用求和方法算出总和后除以总人数(行数)

Output:
92.0

本?中使用了DataFrame的shape方法,这个方法是用来显示DataFrame的行数和列数的,行数为0,列数1。需要注意的是输出的列数值是不含索引列的。

上述?只计算了数学的平均分,感兴趣的小伙伴可以自行基础出英语和语文的平均分哦~

二.统计

这个时候数学老师又有新的需求了,他想查看本班学生数学成绩的最高分、最低分、中位数等统计数据,那么根本不慌,Pandas统统可以帮我们搞定:

df['math'].min()  # math列的最小值
Output:80

df['math'].max()  # math列的最大值
Output:104

df['math'].quantile([0.3, 0.4, 0.5])  # math列的30%、40%、50%分位数
Output:
0.3    87.2
0.4    89.6
0.5    92.0
Name: math, dtype: float64

df['math'].std() # math列的标准差
Output:12

df['math'].var() # math列的方差
Output:144

df['math'].mean() # math列的平均数
Output:92

df['math'].median() # math列的中位数
Output:92

df['math'].mode() # math列的众数,返回一个Series对象(有可能出现并列的情况,例子中众数为1,所以都返回)
Output:
0     80
1     92
2    104
dtype: int64

我们也可以使用DataFrame的describe方法对DataFrame查看基本的统计情况:

df.describe()

Outprint:
          chinese     english   math         sum
count    3.000000    3.000000    3.0    3.000000
mean   104.000000  103.000000   92.0  299.000000
std      6.244998   25.632011   12.0   39.949969
min     99.000000   79.000000   80.0  273.000000
25%    100.500000   89.500000   86.0  276.000000
50%    102.000000  100.000000   92.0  279.000000
75%    106.500000  115.000000   98.0  312.000000
max    111.000000  130.000000  104.0  345.000000

三.排序

一般来讲我们的成绩表都是按照总分从高到低进行排序:

df = df.sort_values(by='sum', ascending=False)


Output:
        name  chinese  english  math  sum
2  HanMeiNei      111      130   104  345
0   XiaoMing       99      100    80  279
1      LiHua      102       79    92  273

可以看到我们使用了sort_values方法对DataFrame进行排序,同时by参数传入‘sum’指定按照‘sum’字段进行排序,ascending用来设置是降序(False)还是升序(True,默认值)排序。使用sort_values排序后默认会返回一个新的DataFrame对象,也就是说并不会影响原有的DataFrame对象,所以例子中我们才会把排序后的对象赋值给原有的DataFrame对象,如果不想排序后创建新的对象也是可以的,只需要传入inplace=True即可(在原有的DataFrame基础上修改):

df.sort_values(by='sum', ascending=False, inplace=True)
print(df)

Output:
        name  chinese  english  math  sum
2  HanMeiNei      111      130   104  345
0   XiaoMing       99      100    80  279
1      LiHua      102       79    92  273

细心的小伙伴可能会发现当我们进行排序后,如果DataFrame中的行数据有调整的话,其行的索引值是不会更改的,上述例子中因为我们用了默认的递增数列索引,所以排序后看起来并不是很友好,不过不用担心,我们还是可以重置索引值的:

df = df.sort_values(by='sum', ascending=False).reset_index()

Output:
   index       name  chinese  english  math  sum
0      2  HanMeiNei      111      130   104  345
1      0   XiaoMing       99      100    80  279
2      1      LiHua      102       79    92  273

使用reset_index重设索引后我们的DataFrame对象的索引列确实被重置成了递增的序列,同时也多了列名为index的一列数据。当然我们可以传入drop=True将原有的索引列不插入到新的DataFrame中:

df = df.sort_values(by='sum', ascending=False).reset_index(drop=True)

        name  chinese  english  math  sum
0  HanMeiNei      111      130   104  345
1   XiaoMing       99      100    80  279
2      LiHua      102       79    92  273

为了更直观的展示排名情况,我们可以索引值+1这样就展示出了学生的排名情况:

df.index += 1

        name  chinese  english  math  sum
1  HanMeiNei      111      130   104  345
2   XiaoMing       99      100    80  279
3      LiHua      102       79    92  273

到此这篇关于Pandas实现DataFrame的简单运算、统计与排序的文章就介绍到这了,更多相关Pandas DataFrame运算统计与排序内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现的防DDoS脚本
Feb 08 Python
使用Python简单的实现树莓派的WEB控制
Feb 18 Python
python实现自主查询实时天气
Jun 22 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
Oct 26 Python
Python获取网段内ping通IP的方法
Jan 31 Python
python定时检测无响应进程并重启的实例代码
Apr 22 Python
python 在某.py文件中调用其他.py内的函数的方法
Jun 25 Python
详解Django定时任务模块设计与实践
Jul 24 Python
利用Python产生加密表和解密表的实现方法
Oct 15 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
详解Python中namedtuple的使用
Apr 27 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
Pandas数据结构之Series的使用
Mar 31 #Python
python获取字符串中的email
Mar 31 #Python
Python利用FlashText算法实现替换字符串
详解Python flask的前后端交互
Mar 31 #Python
ubuntu安装jupyter并设置远程访问的实现
Python中time与datetime模块使用方法详解
Mar 31 #Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 #Python
You might like
常用的php对象类型判断
2008/08/27 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
javascript判断非数字的简单例子
2013/07/18 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
2014/04/08 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
2019/11/12 Javascript
[03:42]2014DOTA2西雅图国际邀请赛7月9日TOPPLAY
2014/07/09 DOTA
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
通过python检测字符串的字母
2020/02/18 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
主管职责范文
2013/11/09 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
职称评定个人总结
2015/03/05 职场文书
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电
部分武汉产收音机展览
2022/04/07 无线电
Python OpenCV形态学运算示例详解
2022/04/07 Python