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使用新浪微博API发送微博的例子
Apr 10 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
python扫描proxy并获取可用代理ip的实例
Aug 07 Python
关于Python的一些学习总结
May 25 Python
Flask框架工厂函数用法实例分析
May 25 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
python定时任务 sched模块用法实例
Nov 04 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
django haystack实现全文检索的示例代码
Jun 24 Python
10个python爬虫入门实例(小结)
Nov 01 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 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
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
Python读取word文本操作详解
2018/01/22 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
怎么写自荐书范文
2014/02/12 职场文书
商场消防安全责任书
2014/07/29 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
教师考核评语大全
2014/12/31 职场文书
学校党支部承诺书
2015/04/30 职场文书
教师调动申请报告
2015/05/18 职场文书
java版 简单三子棋游戏
2022/05/04 Java/Android
cypress测试本地web应用
2022/06/01 Javascript