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 相关文章推荐
Fiddler如何抓取手机APP数据包
Jan 22 Python
Python3删除排序数组中重复项的方法分析
Jan 31 Python
python安装numpy和pandas的方法步骤
May 27 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
python实现数据清洗(缺失值与异常值处理)
Dec 02 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 Python
calendar在python3时间中常用函数举例详解
Nov 18 Python
java关于string最常出现的面试题整理
Jan 18 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 Python
Python实现自动玩连连看的脚本分享
Apr 04 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封装的HttpClient类用法实例
2015/06/17 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
Vuex简单入门
2017/04/19 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
python通过文件头判断文件类型
2015/10/30 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
Python中关于浮点数的冷知识
2019/09/22 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
宿舍打麻将检讨书
2014/01/24 职场文书
旅游市场营销方案
2014/03/09 职场文书
生物技术专业求职信
2014/06/10 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
计划生育诚信协议书
2014/11/02 职场文书
违纪检讨书
2015/01/27 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
无婚姻登记记录证明
2015/06/18 职场文书
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android