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 相关文章推荐
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
Python星号*与**用法分析
Feb 02 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
Python 处理图片像素点的实例
Jan 08 Python
Python装饰器限制函数运行时间超时则退出执行
Apr 09 Python
django 类视图的使用方法详解
Jul 24 Python
pytorch程序异常后删除占用的显存操作
Jan 13 Python
python 画图 图例自由定义方式
Apr 17 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
Python通过递归函数输出嵌套列表元素
Oct 15 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
Python学习之time模块的基本使用
Jan 17 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开发需要注意的安全问题
2010/09/01 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
2017/01/17 Javascript
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
Python牛刀小试密码爆破
2011/02/03 Python
简单介绍Python中的readline()方法的使用
2015/05/24 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
python实现实时视频流播放代码实例
2020/01/11 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
建筑专业毕业生自荐信
2014/05/25 职场文书
2016年元旦主持词
2015/07/06 职场文书
广告文案的撰写技巧(实用干货)
2019/08/23 职场文书
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android