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实现的简单算术游戏实例
May 26 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
Python如何判断数独是否合法
Sep 08 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
Mar 19 Python
用python处理图片实现图像中的像素访问
May 04 Python
python 将json数据提取转化为txt的方法
Oct 26 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
Aug 02 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
python 获取字典键值对的实现
Nov 12 Python
如何用python实现一个HTTP连接池
Jan 14 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 $_SERVER当前完整url的写法
2009/11/12 PHP
php 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
python下载文件时显示下载进度的方法
2015/04/02 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
python 读写中文json的实例详解
2017/10/29 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
python实现单链表的方法示例
2019/09/03 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
2014年质检员工作总结
2014/11/18 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫
Java版 简易五子棋小游戏
2022/05/04 Java/Android