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中pygame模块的Linux下安装过程(详解)
Nov 09 Python
Python OpenCV获取视频的方法
Feb 28 Python
python学习入门细节知识点
Mar 29 Python
python实现旋转和水平翻转的方法
Oct 25 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
Jan 15 Python
django实现HttpResponse返回json数据为中文
Mar 27 Python
Python面向对象多态实现原理及代码实例
Sep 16 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 Python
python区块链实现简版工作量证明
May 25 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
PHP header函数分析详解
2011/08/06 PHP
PHP文件与目录操作示例
2016/12/24 PHP
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
React实现全选功能
2020/08/25 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
socket + select 完成伪并发操作的实例
2017/08/15 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
dpn网络的pytorch实现方式
2020/01/14 Python
pytorch下使用LSTM神经网络写诗实例
2020/01/14 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
Python colormap库的安装和使用详情
2020/10/06 Python
致百米运动员广播稿
2014/01/29 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
学校端午节活动总结
2015/02/11 职场文书
春晚观后感
2015/06/11 职场文书
小学班级口号大全
2015/12/25 职场文书
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js