Pandas分组与排序的实现


Posted in Python onJuly 23, 2019

一、pandas分组

1、分组运算过程:split->apply->combine

  • 拆分:进行分组的根据
  • 应用:每个分组运行的计算规则
  • 合并:把每个分组的计算结果合并起来

Pandas分组与排序的实现

2、分组函数

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs

by: 依据哪些列进行分组,值可以是:mapping, function, label, or list of labels

3、聚合函数

Pandas分组与排序的实现

4、分组聚合实例

单列分组

>>> import pandas as pd
>>> df = pd.DataFrame({'A': ['a', 'b', 'a', 'c', 'a', 'c', 'b', 'c'], 'B': [2, 8, 1, 4,
3, 2, 5, 9], 'C': [102, 98, 107, 104, 115, 87, 92, 123], 'D': [2, 98, 17, 14, 15, 7, 92,
 13]})
>>> df
  A B  C  D
0 a 2 102  2
1 b 8  98 98
2 a 1 107 17
3 c 4 104 14
4 a 3 115 15
5 c 2  87  7
6 b 5  92 92
7 c 9 123 13
>>> df.groupby(by='A').sum()
  B  C  D
A
a  6 324  34
b 13 190 190
c 15 314  34

多列分组

>>> df.groupby(by=['A','B']).sum()       ###A,B成索引
    C  D
A B
a 1 107 17
 2 102  2
 3 115 15
b 5  92 92
 8  98 98
c 2  87  7
 4 104 14
 9 123 13

多列聚合

>>> df.groupby(by=['A','B'])['C'].sum()   ###1个列
A B
a 1  107
  2  102
  3  115
b 5   92
  8   98
c 2   87
  4  104
  9  123
 
>>> df.groupby(by=['A','B'])['C','D'].sum()  ###2个列
    C  D
A B
a 1 107 17
 2 102  2
 3 115 15
b 5  92 92
 8  98 98
c 2  87  7
 4 104 14
 9 123 13

多列不同聚合方式

>>> import numpy as np
>>> df.groupby(by=['A']).agg({'C':[np.mean, 'sum'], 'D':['count',np.std]})
      C     D
     mean sum count    std
A
a 108.000000 324   3 8.144528
b  95.000000 190   2 4.242641
c 104.666667 314   3 3.785939
 
 
>>>ps: 不同列使用多个不同函数进行聚合C: mean,sum;D:count,std

返回值类型区别

方法1:agg
>>> df.groupby(by=['A']).agg({'C':[np.mean]})
      C
     mean
A
a 108.000000
b  95.000000
c 104.666667
>>> type(df.groupby(by=['A']).agg({'C':[np.mean]}))
<class 'pandas.core.frame.DataFrame'>
 
 
方法2:索引
>>> df.groupby(by=['A'])['C'].mean()
A
a  108.000000
b   95.000000
c  104.666667
Name: C, dtype: float64
>>> type(df.groupby(by=['A'])['C'].mean())
<class 'pandas.core.series.Series'>
 
 
 
总结: 两种方法结果一样,但是一个类型是DataFrame,一个为Series;有时候会用上

二、pandas排序

按索引进行降序排列

>>> df
  A B  C  D
0 a 2 102  2
1 b 8  98 98
2 a 1 107 17
3 c 4 104 14
4 a 3 115 15
5 c 2  87  7
6 b 5  92 92
7 c 9 123 13
>>> df.sort_index(ascending=False)    ### 索引
  A B  C  D
7 c 9 123 13
6 b 5  92 92
5 c 2  87  7
4 a 3 115 15
3 c 4 104 14
2 a 1 107 17
1 b 8  98 98
0 a 2 102  2

按值进行降序排列

>>> df.sort_values(by="A",ascending=False)    # 按某一列
  A B  C  D
3 c 4 104 14
5 c 2  87  7
7 c 9 123 13
1 b 8  98 98
6 b 5  92 92
0 a 2 102  2
2 a 1 107 17
4 a 3 115 15
 
>>> df.sort_values(by=["B","A"],ascending=False)  # 按2列
  A B  C  D
7 c 9 123 13
1 b 8  98 98
6 b 5  92 92
3 c 4 104 14
4 a 3 115 15
5 c 2  87  7
0 a 2 102  2
2 a 1 107 17

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现文件名批量替换和内容替换
Mar 20 Python
python中反射用法实例
Mar 27 Python
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 Python
Python中__new__与__init__方法的区别详解
May 04 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
anaconda中更改python版本的方法步骤
Jul 14 Python
由面试题加深对Django的认识理解
Jul 19 Python
python实现人机五子棋
Mar 25 Python
python3 sleep 延时秒 毫秒实例
May 04 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 #Python
Django logging配置及使用详解
Jul 23 #Python
Python利用scapy实现ARP欺骗的方法
Jul 23 #Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
Jul 23 #Python
提升Python效率之使用循环机制代替递归函数
Jul 23 #Python
深入了解Django View(视图系统)
Jul 23 #Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 #Python
You might like
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
vue中的scope使用详解
2017/10/29 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
解决qrcode.js生成二维码时必须定义一个空div的问题
2020/07/09 Javascript
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
Django中FilePathField字段的用法
2020/05/21 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
工厂仓管员岗位职责
2014/01/01 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
在校生证明
2015/06/17 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js