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 相关文章推荐
在Django的URLconf中进行函数导入的方法
Jul 18 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 Python
Python 编码Basic Auth使用方法简单实例
May 25 Python
Python操作word常见方法示例【win32com与docx模块】
Jul 17 Python
python保存文件方法小结
Jul 27 Python
如何安装多版本python python2和python3共存以及pip共存
Sep 18 Python
python实现简单五子棋游戏
Jun 18 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
Sep 16 Python
python基于socket函数实现端口扫描
May 28 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
python geopandas读取、创建shapefile文件的方法
Jun 29 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
PHP&amp;MYSQL服务器配置说明
2006/10/09 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
PHP中16个高危函数整理
2019/09/19 PHP
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
jQuery循环遍历子节点并获取值的方法
2016/04/14 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
python修改注册表终止360进程实例
2014/10/13 Python
Python 专题一 函数的基础知识
2017/03/16 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
台湾生鲜宅配:大口市集
2017/10/14 全球购物
酒吧总经理岗位职责
2013/12/10 职场文书
高中毕业自我评价
2014/02/08 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
公司经理聘任书
2014/03/29 职场文书
室内趣味活动方案
2014/08/24 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
英语演讲开场白
2015/05/29 职场文书
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python