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使用webbrowser浏览指定url的方法
Apr 04 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
Oct 11 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
用Python配平化学方程式的方法
Jul 20 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
Python ADF 单位根检验 如何查看结果的实现
Jun 03 Python
python在一个范围内取随机数的简单实例
Aug 16 Python
Python requests接口测试实现代码
Sep 08 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
python 绘制正态曲线的示例
Sep 24 Python
python推导式的使用方法实例
Feb 28 Python
Python加密与解密模块hashlib与hmac
Jun 05 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
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
《金色的脚印》教后反思
2014/04/23 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
停车位租赁协议书
2014/09/24 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
导游词之桂林
2019/08/20 职场文书
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js
python+opencv实现目标跟踪过程
2022/06/21 Python