Pandas之groupby( )用法笔记小结


Posted in Python onJuly 23, 2019

groupby官方解释

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

Group series using mapper (dict or key function, apply given function to group, return result as series) or by a series of columns.

讲真的,非常不能理解pandas官方文档的这种表达形式,让人真的有点摸不着头脑,example给得又少,参数也不给得很清楚,不过没有办法,还是只能选择原谅他。

groupby我用过的用法

基本用法我这里就不呈现了,我觉得用过一次的人基本不会忘记,这里我主要写一下我用过的关系groupby函数的疑惑:

apply & agg

这个问题着实困扰了我很久,经过研究,找了一些可能帮助理解的东西。先举一个例子:

import pandas as pd
df = pd.DataFrame({'Q':['LI','ZHANG','ZHANG','LI','WANG'], 'A' : [1,1,1,2,2], 'B' : [1,-1,0,1,2], 'C' : [3,4,5,6,7]})

  A B C Q
0 1 1 3 LI
1 1 -1 4 ZHANG
2 1 0 5 ZHANG
3 2 1 6 LI
4 2 2 7 WANG
df.groupby('Q').apply(lambda x:print(x))

       A  B  C   Q
    0  1  1  3  LI
    3  2  1  6  LI
       A  B  C   Q
    0  1  1  3  LI
    3  2  1  6  LI
       A  B  C     Q
    4  2  2  7  WANG
       A  B  C      Q
    1  1 -1  4  ZHANG
    2  1  0  5  ZHANG

df.groupby('Q').agg(lambda x:print(x))

    0    1
    3    2
    Name: A, dtype: int64
    4    2
    Name: A, dtype: int64
    1    1
    2    1
    Name: A, dtype: int64
    0    1
    3    1
    Name: B, dtype: int64
    4    2
    Name: B, dtype: int64
    1   -1
    2    0
    Name: B, dtype: int64
    0    3
    3    6
    Name: C, dtype: int64
    4    7
    Name: C, dtype: int64
    1    4
    2    5
    Name: C, dtype: int64

  A B C
Q      
LI None None None
WANG None None None
ZHANG None None None

从这个例子可以看出,使用apply()处理的对象是一个个的类如DataFrame的数据表,然而agg()则每次只传入一列。

不过我觉得这一点区别在实际应用中分别并不大,因为Ipython的Out输出对于这两个函数几乎没有差别,不管是处理一列还是一表。

我觉得agg()有一点让我很开心就是他可以同时传入多个函数,简直不要太方便哈哈:

df.groupby('Q').agg(['mean','std','count','max'])

  A B C
  mean std count max mean std count max mean std count max
Q                        
LI 1.5 0.707107 2 2 1.0 0.000000 2 1 4.5 2.121320 2 6
WANG 2.0 NaN 1 2 2.0 NaN 1 2 7.0 NaN 1 7
ZHANG 1.0 0.000000 2 1 -0.5 0.707107 2 0 4.5 0.707107 2 5

Plotting

这个也是我刚刚学会的,groupby的plot简直不要太方便了:(不过这个例子选的不是很好)

%matplotlib inline
df.groupby('Q').agg(['mean','std','count','max']).plot(kind='bar')
<matplotlib.axes._subplots.AxesSubplot at 0x1133bd710>

Pandas之groupby( )用法笔记小结

MultiIndex

这个是困扰我最多的一个问题,因为如果我groupby的时候选择了两个level,之后的data总是呈现透视表的形式,如:

Muldf = df.groupby(['Q','A']).agg('mean')
print(Muldf)

               B    C
    Q     A         
    LI    1  1.0  3.0
          2  1.0  6.0
    WANG  2  2.0  7.0
    ZHANG 1 -0.5  4.5

我开始甚至以为这应该不是dataframe,是一个我可能没注意过的一个东西,可是后来我发现,这不过是MultiIndex形式的一种dataframe罢了。

Muldf.B

    Q      A
    LI     1    1.0
           2    1.0
    WANG   2    2.0
    ZHANG  1   -0.5
    Name: B, dtype: float64

如果要选择某一个index,用`xs()`函数:

Muldf.xs('LI')

  B C
A    
1 1.0 3.0
2 1.0 6.0

PS:有个问题困扰好久了,怎么把multiindex对象变回原来的形式呢。如:

Multiindex格式如下:(a, b, c, ...),

index column
(a1,b1,c1) d1
(a2,b2,c2) d2

直接调用函数reset_index(),Multiindex中(a, b, c, ...)就变成columns了,index重置为(0,1,2,...), 如下:

index       column
0 a1 b1 c1 d1
1 a2 b2 c2 d2

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

Python 相关文章推荐
python轻松查到删除自己的微信好友
Jan 10 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
Python3.x对JSON的一些操作示例
Sep 01 Python
python判断设备是否联网的方法
Jun 29 Python
启动Atom并运行python文件的步骤
Nov 09 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 Python
python使用opencv实现马赛克效果示例
Sep 28 Python
python程序输出无内容的解决方式
Apr 09 Python
解决Jupyter NoteBook输出的图表太小看不清问题
Apr 16 Python
Keras loss函数剖析
Jul 06 Python
pandas 实现将NaN转换为None
May 14 Python
python基础之函数的定义和调用
Oct 24 Python
Python OpenCV调用摄像头检测人脸并截图
Aug 20 #Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 #Python
Django 静态文件配置过程详解
Jul 23 #Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
Jul 23 #Python
pandas通过字典生成dataframe的方法步骤
Jul 23 #Python
Python基于OpenCV实现人脸检测并保存
Jul 23 #Python
python 读取修改pcap包的例子
Jul 23 #Python
You might like
也谈截取首页新闻 - 范例
2006/10/09 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
Jquery cookie操作代码
2010/03/14 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
Vant picker 多级联动操作
2020/11/02 Javascript
举例区分Python中的浅复制与深复制
2015/07/02 Python
Python升级导致yum、pip报错的解决方法
2017/09/06 Python
对python3 一组数值的归一化处理方法详解
2018/07/11 Python
对Python中内置异常层次结构详解
2018/10/18 Python
python导入pandas具体步骤方法
2019/06/23 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
python中class的定义及使用教程
2019/09/18 Python
python__new__内置静态方法使用解析
2020/01/07 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
点菜员岗位职责范本
2014/02/14 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers