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 01 Python
Python验证码识别的方法
Jul 10 Python
python基础教程之五种数据类型详解
Jan 12 Python
Python设计模式之策略模式实例详解
Jan 21 Python
python解析含有重复key的json方法
Jan 22 Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 Python
Python使用get_text()方法从大段html中提取文本的实例
Aug 27 Python
mac使用python识别图形验证码功能
Jan 10 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 Python
python函数map()和partial()的知识点总结
May 26 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 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
解决laravel session失效的问题
2019/10/14 PHP
PHP执行系统命令函数实例讲解
2021/03/03 PHP
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
2010/11/25 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
Three.js学习之网格
2016/08/10 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
python使用分治法实现求解最大值的方法
2015/05/12 Python
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
python构建深度神经网络(DNN)
2018/03/10 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
Order by的几种用法
2013/06/16 面试题
生物制药专业求职信
2014/03/11 职场文书
咖啡店创业计划书范文
2014/09/15 职场文书
年终工作总结范文2014
2014/11/27 职场文书
小学生毕业评语
2014/12/26 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
追讨欠款律师函
2015/06/24 职场文书