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 threading模块操作多线程介绍
Apr 08 Python
python实现简单的socket server实例
Apr 29 Python
Python实现八大排序算法
Aug 13 Python
详解python开发环境搭建
Dec 16 Python
Python中列表与元组的乘法操作示例
Feb 10 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
tensorflow实现加载mnist数据集
Sep 08 Python
Django框架视图层URL映射与反向解析实例分析
Jul 29 Python
python如何调用字典的key
May 25 Python
最简单的matplotlib安装教程(小白)
Jul 28 Python
ROS系统将python包编译为可执行文件的简单步骤
Jul 25 Python
Python字典的基础操作
Nov 01 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
图书管理程序(一)
2006/10/09 PHP
php访问查询mysql数据的三种方法
2006/10/09 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
php语法检查的方法总结
2019/01/21 PHP
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
2011/03/28 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
jquery连缀语法如何实现
2012/11/29 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
浅谈Python单向链表的实现
2015/12/24 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
python实现屏保计时器的示例代码
2018/08/08 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
餐厅销售主管职责范本
2014/02/19 职场文书
服务员岗位职责
2015/02/03 职场文书
社区重阳节活动总结
2015/03/24 职场文书
安全教育日主题班会
2015/08/13 职场文书
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技