pandas数据分组和聚合操作方法


Posted in Python onApril 11, 2018

《Python for Data Analysis》

GroupBy

分组运算:split-apply-combine(拆分-应用-合并)

DataFrame可以在其行(axis=0)或列(axis=1)上进行分组。然后,将一个函数应用到各个分组并产生新值。最后,所有这些函数的执行结果会被合并到最终的结果对象中去。

GroupBy的size方法可以返回一个含有分组大小的Series。

对分组进行迭代

for (k1,k2), group in df.groupby(['key1','key2']):
 print k1,k2
 print group

选取一个或一组列

df.groupby(['key1','key2'])[['data2']].mean()

通过字典或Series进行分组

只需将字典或Series传给groupby即可。

通过函数分组

people.groupby(len).sum() #根据人名的长度进行分组

通过索引级别分组

层次化索引数据,根据索引级别进行聚合,通过level关键字传入级别编号或名称。

df.groupby(level='cty',axis=1).count()

数据聚合

经过优化的groupby方法

函数名 说明
count 分组中非NA值得数量
sum 非NA值的和
mean 非NA值的平均值
median 非NA值的算术平均数
std、var 无偏(分母为n-1)标准差和方差
min、max 非NA值的最小值和最大值
prod 非NA值的积
first、last 第一个和最后一个非NA值

对于上述描述统计方法,可以将函数名以字符串的形式传入agg方法。例如:grouped.agg(['mean', 'std'])

如果要使用自己的聚合函数,只需将其传入aggregate或agg方法即可

def peak_to_peak(arr):
 return arr.max() - arr.min()
grouped.agg(peak_to_peak)

面向列的多函数应用,可以对不同的列使用不同的聚合函数或者一次应用多个函数。

如果传入一组函数或函数名,得到的DataFrame的列就会以相应的函数命名

如果传入的是一个由(name,function)元组组成的列表,各个元组的第一个元素就会被用作DataFrame的列名。

不同的列使用不同的聚合函数也可以向agg传入一个从列名映射到函数的字典

grouped.agg(['mean', 'std', peak_to_peak]) # 1
grouped.agg([('foo', 'mean'), ('bar', np.std)]) # 2
functions = ['count', 'mean', 'max']
result = grouped['tip', 'bill'].agg(functions) # 3
grouped.agg({'tip' : np.max, 'bill' : 'sum'}) # 4

分组级运算和转换

transform

transform会将一个函数应用到各个分组,然后将结果放置到适当的位置上。如果各个分组产生的是一个标量值,则该值就会被广播出去。

apply

一般性的“拆分-应用-合并”

tips.groupby('smoker').apply(top)相当于top函数在DataFrame的各个片段上调用,然后结果由pandas.concat组装到一起,并以分组名称进行了标记。,于是,最终结果就有了一个层次化索引,其内层索引值来自于原DataFrame.

禁止分组键: 分组键会跟原始对象的索引共同构成结果对象中的层次化索引。将group_keys=False传入groupby即可禁止该效果。tips.groupby('smoker', group_keys=False).apply(top)

在GroupBy对象上调用describe相当于f = lambda x : x.describe(); grouped.apply(f).

数据汇总工具

透视表 pivot_table

根据一个或多个键对数据进行聚合,并根据行和列上的分组键将数据分配到各个矩形区域。

tips.pivot_table('tip_pct', index=['time', 'size', 'smoker'], 
columns='day', aggfunc='mean', fill_value=0)

参数名 说明
values 待聚合的列的名称。默认所有列
rows 用于分组的列名或者其他分组键,出现在结果透视表的行
cols 用于分组的列名或者其他分组键,出现在结果透视表的列
aggfunc 聚合函数或函数列表,默认“mean”。可以是任何对groupby有效的函数
fill_value 用于替换结果表中缺失值
margins 添加行/列小计和总计,默认为False

交叉表 crosstab

是一种用于计算分组频率的特殊透视表。

pd.crosstab([tips.time, tips.day], tips.smoker, margins=True)

以上这篇pandas数据分组和聚合操作方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python内建数据结构详解
Feb 03 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
如何用Python合并lmdb文件
Jul 02 Python
Python解决走迷宫问题算法示例
Jul 27 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
python 实现兔子生兔子示例
Nov 21 Python
Win10里python3创建虚拟环境的步骤
Jan 31 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
Apr 19 Python
python可迭代对象去重实例
May 15 Python
Django中F函数的使用示例代码详解
Jul 06 Python
Django一小时写出账号密码管理系统
Apr 29 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 #Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 #Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 #Python
pandas对指定列进行填充的方法
Apr 11 #Python
Python入门学习指南分享
Apr 11 #Python
对numpy和pandas中数组的合并和拆分详解
Apr 11 #Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
Apr 11 #Python
You might like
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
新浪中用来显示flash的函数
2007/04/02 Javascript
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
手动初始化Angular的模块与控制器
2016/12/26 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
Python IDLE清空窗口的实例
2018/06/25 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
Pytorch之Variable的用法
2019/12/31 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
世界上最大的各式箱包网络零售店:eBag
2016/07/21 全球购物
营业员实习自我鉴定
2013/12/07 职场文书
创先争优个人总结
2015/03/04 职场文书
离婚纠纷代理词
2015/05/23 职场文书
毕业感言怎么写
2015/07/31 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书