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使用Tkinter显示网络图片的方法
Apr 24 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
使用Python对Csv文件操作实例代码
May 12 Python
python django 实现验证码的功能实例代码
May 18 Python
Python通过Django实现用户注册和邮箱验证功能代码
Dec 11 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
Python数据类型之String字符串实例详解
May 08 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
Python操作Sonqube API获取检测结果并打印过程解析
Nov 27 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
Feb 28 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 Python
Python Matplotlib绘制条形图的全过程
Oct 24 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
德劲1104的电路分析与改良
2021/03/01 无线电
substr()函数中文版
2006/10/09 PHP
PHP的ASP防火墙
2006/10/09 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
js优化针对IE6.0起作用(详细整理)
2012/12/25 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
win与linux系统中python requests 安装
2016/12/04 Python
python实现下载整个ftp目录的方法
2017/01/17 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
Python logging设置和logger解析
2019/08/28 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
意大利团购网站:Groupon意大利
2016/10/11 全球购物
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
PHP如何自定义函数
2016/09/16 面试题
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
新领导上任欢迎词
2014/01/13 职场文书
机械设计及其自动化求职推荐信
2014/02/17 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
应届毕业生自荐信
2014/05/28 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
中秋客户感谢信
2015/01/22 职场文书
关于观后感的作文
2015/06/18 职场文书
javascript遍历对象的五种方式实例代码
2021/10/24 Javascript
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python