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 相关文章推荐
使用SAE部署Python运行环境的教程
May 05 Python
详解Python发送邮件实例
Jan 10 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
Python中的字符串切片(截取字符串)的详解
May 15 Python
全面了解django的缓存机制及使用方法
Jul 22 Python
python 内置函数汇总详解
Sep 16 Python
python计算导数并绘图的实例
Feb 29 Python
python为QT程序添加图标的方法详解
Mar 09 Python
Python使用内置函数setattr设置对象的属性值
Oct 16 Python
Python+Tkinter制作专属图形化界面
Apr 01 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读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
PHP 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
jQuery插件zTree实现删除树子节点的方法示例
2017/03/08 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
python实现简单socket通信的方法
2016/04/19 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
python实现用户名密码校验
2020/03/18 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
Ruby如何定义一个类
2012/10/08 面试题
工程现场管理求职自荐信
2013/10/02 职场文书
通信工程毕业生求职信
2013/11/16 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
离婚财产分割协议书
2015/08/11 职场文书
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技