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网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
Jun 09 Python
Python pickle模块用法实例分析
May 27 Python
python获取各操作系统硬件信息的方法
Jun 03 Python
python 通过字符串调用对象属性或方法的实例讲解
Apr 21 Python
python绘制立方体的方法
Jul 02 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
Python 获取windows桌面路径的5种方法小结
Jul 15 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
在Matplotlib图中插入LaTex公式实例
Apr 17 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
Aug 24 Python
Python脚本调试工具安装过程
Jan 11 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静态类的原罪详解
2013/05/06 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
JS日历 推荐
2006/12/03 Javascript
IE8 原生JSON支持
2009/04/13 Javascript
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
[02:31]2018年度DOTA2最具人气选手-完美盛典
2018/12/16 DOTA
以一段代码为实例快速入门Python2.7
2015/03/31 Python
pandas分区间,算频率的实例
2019/07/04 Python
Python tkinter和exe打包的方法
2020/02/05 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
生产部管理制度
2014/01/31 职场文书
十八大标语口号
2014/10/09 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
深度学习详解之初试机器学习
2021/04/14 Python
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript