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 相关文章推荐
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
对Django url的几种使用方式详解
Aug 06 Python
python中的反斜杠问题深入讲解
Aug 12 Python
Django框架 querySet功能解析
Sep 04 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
Dec 11 Python
python 实现多维数组(array)排序
Feb 28 Python
PyTorch安装与基本使用详解
Aug 31 Python
Python用摘要算法生成token及检验token的示例代码
Dec 01 Python
Matplotlib中rcParams使用方法
Jan 05 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
PHP new static 和 new self详解
2017/02/19 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
解决在Laravel 中处理OPTIONS请求的问题
2019/10/11 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
jquery实现网页查找功能示例分享
2014/02/12 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
Python编程中NotImplementedError的使用方法
2018/04/21 Python
python中for用来遍历range函数的方法
2018/06/08 Python
python 调用有道api接口的方法
2019/01/03 Python
Django之路由层的实现
2019/09/09 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
Django数据库迁移常见使用方法
2020/11/12 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
大学生党员自我评价范文
2014/04/09 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
酒店员工培训方案
2014/06/02 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
联谊活动总结范文
2015/05/09 职场文书
职位证明模板
2015/06/23 职场文书
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers