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时间整形转标准格式的示例分享
Feb 14 Python
Python中实现结构相似的函数调用方法
Mar 10 Python
Python实现的简单算术游戏实例
May 26 Python
Python的GUI框架PySide的安装配置教程
Feb 16 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
Django Aggregation聚合使用方法解析
Aug 01 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
基于Tensorflow一维卷积用法详解
May 22 Python
Pygame框架实现飞机大战
Aug 07 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
深入了解php4(1)--回到未来
2006/10/09 PHP
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
str_replace只替换一次字符串的方法
2013/04/09 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
python实现从字典中删除元素的方法
2015/05/04 Python
Python求导数的方法
2015/05/09 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
python版本的仿windows计划任务工具
2018/04/30 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
Django对models里的objects的使用详解
2019/08/17 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
加热夹克:RAVEAN
2018/10/19 全球购物
中专毕业生自荐信范文
2013/11/28 职场文书
小学家长学校培训材料
2014/08/24 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
教师远程研修感悟
2015/11/18 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript