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实现划词翻译
Apr 23 Python
python放大图片和画方格实现算法
Mar 30 Python
对numpy 数组和矩阵的乘法的进一步理解
Apr 04 Python
对Python subprocess.Popen子进程管道阻塞详解
Oct 29 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
关于Theano和Tensorflow多GPU使用问题
Jun 19 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 Python
python+selenium小米商城红米K40手机自动抢购的示例代码
Mar 24 Python
python元组打包和解包过程详解
Aug 02 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环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
2011/10/17 PHP
php变量作用域的深入解析
2013/06/03 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
分享3个php获取日历的函数
2015/09/25 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
解决vant中 tab栏遇到的坑 van-tabs
2020/11/04 Javascript
简介Python中用于处理字符串的center()方法
2015/05/18 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
竞争与合作演讲稿
2014/05/12 职场文书
三行辞职书范文
2015/02/26 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
食品药品安全责任书
2015/05/11 职场文书
实习单位意见
2015/06/04 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
Redis Cluster 集群搭建你会吗
2021/08/04 Redis
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫