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

 更新时间:2018年04月11日 16:12:01   作者:Shingle_  
下面小编就为大家分享一篇pandas数据分组和聚合操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

《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+selenium爬取微博热搜存入Mysql的实现方法

    python+selenium爬取微博热搜存入Mysql的实现方法

    这篇文章主要介绍了python+selenium爬取微博热搜存入Mysql的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • python实现从ftp上下载文件的实例方法

    python实现从ftp上下载文件的实例方法

    在本篇文章里小编给大家整理了关于python实现从ftp上下载文件的实例方法,需要的朋友们可以参考下。
    2020-07-07
  • Python操作使用MySQL数据库的实例代码

    Python操作使用MySQL数据库的实例代码

    本篇文章主要介绍了Python 操作 MySQL的实例代码,详细介绍了Python如何连接数据库和对数据的增删查改,有兴趣的可以了解一下
    2017-05-05
  • Django框架 查询Extra功能实现解析

    Django框架 查询Extra功能实现解析

    这篇文章主要介绍了Django框架 查询Extra功能实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • tensorflow 获取所有variable或tensor的name示例

    tensorflow 获取所有variable或tensor的name示例

    今天小编就为大家分享一篇tensorflow 获取所有variable或tensor的name示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Pyecharts 动态地图 geo()和map()的安装与用法详解

    Pyecharts 动态地图 geo()和map()的安装与用法详解

    这篇文章主要介绍了Pyecharts 动态地图 geo()和map()的安装与用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • pandas 实现将NaN转换为None

    pandas 实现将NaN转换为None

    这篇文章主要介绍了pandas 实现将NaN转换为None的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • socket + select 完成伪并发操作的实例

    socket + select 完成伪并发操作的实例

    下面小编就为大家带来一篇socket + select 完成伪并发操作的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • python调用fortran模块

    python调用fortran模块

    本文给大家介绍的是在Python中调用fortran代码,主要是用到了f2py这个程序,十分的实用,有需要的小伙伴可以参考下
    2016-04-04
  • python实现抠图给证件照换背景源码

    python实现抠图给证件照换背景源码

    这篇文章主要为大家详细介绍了python实现抠图给证件照换背景源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08

最新评论