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对json的相关操作实例详解
Jan 04 Python
关于python的bottle框架跨域请求报错问题的处理方法
Mar 19 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 Python
对json字符串与python字符串的不同之处详解
Dec 19 Python
python 字典 setdefault()和get()方法比较详解
Aug 07 Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 Python
python多线程扫描端口(线程池)
Sep 04 Python
win10下python2和python3共存问题解决方法
Dec 23 Python
python中rb含义理解
Jun 18 Python
利用python 下载bilibili视频
Nov 13 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
用 PHP5 轻松解析 XML
2006/12/04 PHP
10条PHP编程习惯助你找工作
2008/09/29 PHP
基于PHP CURL用法的深入分析
2013/06/09 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
PHP生成word文档的三种实现方式
2016/11/14 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
jQuery参数列表集合
2011/04/06 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
前台js调用后台方法示例
2013/12/02 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
jquery版轮播图效果和extend扩展
2017/07/18 jQuery
vue.js删除列表中的一行
2018/06/30 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
python基于multiprocessing的多进程创建方法
2015/06/04 Python
python模块smtplib学习
2018/05/22 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
执行Python程序时模块报错问题
2020/03/26 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
自我鉴定总结
2014/03/24 职场文书
庆元旦文艺演出主持词
2014/03/27 职场文书
授权收款委托书
2014/09/23 职场文书
储备店长岗位职责
2015/04/14 职场文书