前面讲完了字符处理,但对数据进行整体性的聚合运算以及分组操作也是数据分析的重要内容。

通过数据的聚合与分组,我们能更容易的发现隐藏在数据中的规律。

数据分组

数据的分组核心思想是:拆分-组织-合并

首先,我们了解下groupby这个函数

import numpy as np
import pandas as pd data=pd.DataFrame({'level':['a','b','c','b','a'],
'num':[3,5,6,8,9]})
print(data)

结果为:

combine=data['num'].groupby(data['level'])
print(combine.mean())

结果为:



这里是以level为关键字对num进行分组,然后求平均值。当然groupby中也可以放入多个分组,用逗号隔开

print(combine.size())

结果为:



返回每个分组的频率

另外,我们也可以根据数据的所属类型对进行分组

combine=data.groupby(data.dtypes,axis=1)

print(dict(list(combine)))

结果为:



这里combine的是Serise数据结构,需要转换线转换为列表,再转成字典的形式才能打印。

data=pd.DataFrame(np.random.randn(5,5),
index=['li','chen','wang','zhao','qian'],
columns=['a','b','c','d','e']) print(data)

结果为:

data.ix[1:3,['b','c']]=np.nan
map={'a':'ss','b':'kk','c':'ss','d':'kk','e':'kk'}
print(data.groupby(map,axis=1).sum())

结果为:



这里map是我们手工创造的字典,然后我们根据字典的对应表对data数据的行进行分组求和。

数据聚合

在各计算机语言中,聚合函数几乎都差不多,下面我们来看下python中的聚合函数



当然,我们也可以通过自定义函数来扩展方法。

跟上面直接在数据后面加聚合函数方法略有不同,聚合函数这里也可以传入agg或aggregate中

data=pd.DataFrame({'level':['a','b','c','b','a'],
'num':[3,5,6,8,9]})
newdata=data.groupby('level')
print(newdata.agg('mean'))

结果为:

print(newdata.agg(['mean','sum','std']))

也可以多个聚合函数一起使用:



还能用字典的形式进行聚合运算

data=pd.DataFrame({'level':['a','b','c','b','a'],
'num':[3,5,6,8,9],
'num1':[2,5,9,6,8]})
newdata=data.groupby('level')
print(newdata.agg({'num':'mean','num1':'sum'}))

结果为:

接下来我们了解下transform

data=pd.DataFrame(np.random.randn(5,5),
index=['li','chen','wang','zhao','qian'],
columns=['a','b','c','d','e']) key=['ss','kk','kk','ss','ss']
print(data.groupby(key).mean())

结果为



正常求均值之后,会独立形成一个dataframe

print(data.groupby(key).transform(np.mean))

结果为:



而在使用transform时,在直接在原来的数据格式下形成新的均值表

这个过程中,经历了数据的拆分,求均值,然后再合并

接下来我们看下更强大的apply

之所以说apply的强大在于,可以我们通过自定义函数,实现我们任何想要的形式对数据进行聚合运算,

但这也是apply相对而言较难的地方,关键点在于如何构造自定义函数。

data=pd.DataFrame({'level':['a','b','c','b','a'],
'num':[3,5,6,8,9],
'num1':[2,5,9,6,8]})
def fun(data):
return data.groupby('level').agg(['mean','sum']) print(data)

结果为:

print(data.groupby('level').apply(fun))

结果为:

最后,在数据分析中,我们经常要用到的一个excel功能是数据透视表,这对我们观察数据规律十分有帮助,

在python中也可以通过pivot_table实现数据透视功能

data=pd.DataFrame({'level':['a','b','c','b','a'],
'key':['one','two','one','two','one'],
'num':[3,5,6,8,9],
'num1':[2,5,9,6,8]})
print(data)

结果为:

print(data.pivot_table(index='key',columns='level'))

结果为:



当然只有你调整参数内容就可以像excel中随心所欲的变化行列位置,这里的计数结果默认为均值,用其他聚合函数可以通过aggfunc参数进行设置。

另外还有一个用于计算分组频率的cosstab,使用方法比pivot_table要简单些,形式也类似于execl的数据透视表功能。

print(pd.crosstab(data.key,data.level,margins=True))

结果为

python 数据聚合与分组的更多相关文章

  1. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

  2. Python数据聚合和分组运算(1)-GroupBy Mechanics

    前言 Python的pandas包提供的数据聚合与分组运算功能很强大,也很灵活.<Python for Data Analysis>这本书第9章详细的介绍了这方面的用法,但是有些细节不常用 ...

  3. Python数据聚合和分组运算(2)-Data Aggregation

    在上一篇博客里我们讲解了在python里运用pandas对数据进行分组,这篇博客将接着讲解对分组后的数据进行聚合. 1.python 中经过优化的groupy方法  先读入本文要使用的数据集tips. ...

  4. 《python for data analysis》第九章,数据聚合与分组运算

    # -*- coding:utf-8 -*-# <python for data analysis>第九章# 数据聚合与分组运算import pandas as pdimport nump ...

  5. Python之数据聚合与分组运算

    Python之数据聚合与分组运算 1. 关系型数据库方便对数据进行连接.过滤.转换和聚合. 2. Hadley Wickham创建了用于表示分组运算术语"split-apply-combin ...

  6. Python 数据分析—第九章 数据聚合与分组运算

    打算从后往前来做笔记 第九章 数据聚合与分组运算 分组 #生成数据,五行四列 df = pd.DataFrame({'key1':['a','a','b','b','a'], 'key2':['one ...

  7. 《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算(一)

    http://www.cnblogs.com/batteryhp/p/5046450.html 对数据进行分组并对各组应用一个函数,是数据分析的重要环节.数据准备好之后,通常的任务就是计算分组统计或生 ...

  8. 利用python进行数据分析之数据聚合和分组运算

    对数据集进行分组并对各分组应用函数是数据分析中的重要环节. group by技术 pandas对象中的数据会根据你所提供的一个或多个键被拆分为多组,拆分操作是在对象的特定轴上执行的,然后将一个函数应用 ...

  9. 利用Python进行数据分析-Pandas(第六部分-数据聚合与分组运算)

    对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节.在将数据集加载.融合.准备好之后,通常是计算分组统计或生成透视表.pandas提供了一个灵活高效的group ...

随机推荐

  1. redmine的邮件配置

    redmine的邮件配置 2012-01-04 18:09:21|  分类: 默认分类|举报|字号 订阅     redmine里要用到邮件通知,本来以为很是简单,网上也有许多教程,谁知忙活了一下午, ...

  2. 编辑控件CKEditor和CKFinder

    -使用HTML编辑控件CKEditor和CKFinder Web开发上有很多HTML的编辑控件,如CKEditor.kindeditor等等,很多都做的很好,本文主要介绍在MVC界面里面,CKEdit ...

  3. WCF、Web API、WCF REST、Web Service 区别

    Web Service It is based on SOAP and return data in XML form. It support only HTTP protocol. It is no ...

  4. 如何使用MacVim

    如何使用MacVim 如何使用MacVim 如何使用MacVim呢? 命令模式 按下ESC 高效率移动 1.在插入模式之外 基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面 VIM 就 ...

  5. const 还是 static readonly

    到底是 const 还是 static readonly   真的一样? const 和 static readonly 常在程序中用来声明常量,调用方法也没有什么不同,他们真的一样吗?我们可以做个试 ...

  6. 企业架构与建模之ArchiMate的由来和详述(上)

    终于完成了关于企业架构框架理论的总结,谢谢各位看官的支持,能挺过之前过于理论化的叙述而坚持到现在着实不易,笔者也自愧没有实践经验可以分享,希望日后有兴趣的看官能够不吝赐教.在本系列后面的也是最后一个大 ...

  7. ios学习笔记之UIViewControl生命周期

    提到UIViewcontrol,每个人都不会陌生吧!平时实际开发中,每天的实际开发应该都少不了它.学过android的各位亲,也对生命周期这四个字并不陌生,无论是activity,还是service, ...

  8. csshack技术

    我最近想好好整理下csshack技术,但是结果很沮丧,下面我将我最初写的笔记和大家分享下. 我在单位整理的研究笔记: 不同的浏览器对某些CSS代码解析会存在一定的差异,因此就会导致不同浏览器下给用户展 ...

  9. spring redis入门

    小二,上菜!!! 1. 虚拟机上安装redis服务 下载tar包,wget http://download.redis.io/releases/redis-2.8.19.tar.gz. 解压缩,tar ...

  10. hdu1358

    Problem Description For each prefix of a given string S with N characters (each character has an ASC ...