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中property函数用法实例分析
Jun 04 Python
Python实现的tcp端口检测操作示例
Jul 24 Python
使用TensorFlow实现SVM
Sep 06 Python
分享Python切分字符串的一个不错方法
Dec 14 Python
对pandas的算术运算和数据对齐实例详解
Dec 22 Python
Python元组知识点总结
Feb 18 Python
Python Pandas 如何shuffle(打乱)数据
Jul 30 Python
Python 变量的创建过程详解
Sep 02 Python
使用python求解二次规划的问题
Feb 29 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 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
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
php 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
PHP查询分页的实现代码
2017/06/09 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
xtree.js 代码
2007/03/13 Javascript
js 异步处理进度条
2010/04/01 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
用javascript将数据导入Excel示例代码
2014/09/10 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
2018/01/09 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
python解析html开发库pyquery使用方法
2014/02/07 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
OpenCV-Python 摄像头实时检测人脸代码实例
2019/04/30 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
python实现控制台输出彩色字体
2020/04/05 Python
使用K.function()调试keras操作
2020/06/17 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
腾讯公司的一个sql题
2013/01/22 面试题
高中数学教学反思
2014/01/30 职场文书
代理班主任的自我评价
2014/02/04 职场文书
2014年中秋寄语
2014/08/11 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js