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

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

数据分组

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

首先,我们了解下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. SQL Server 行版本控制

    什么时候开启行版本? 当发现系统中存在大量读写阻塞的时候,就是我们开启行版本的时候了.要点:写写阻塞的场景行版本技术解决不了 开启方式: -- 设置为单用户 ALTER DATABASE MyTest ...

  2. knockout笔记

    根据汤姆大叔博客总结-笔记: =============<script type="text/javascript"> $(function () { var View ...

  3. .NET MVC通过反射获取数据修

    .NET MVC通过反射获取数据修 折磨了我一个晚上的问题,奈何对物理的反射印象太深了,整天去想着物理的反射.折射怎么解.感谢少将哥哥给我的指点,经过一个晚上对反射的恶补,最终搞定了.纪念一下. 1. ...

  4. viewstate cookie和session原理回顾

    --个人理解会存在些错误仅供参考!!! ----浏览器保持会话状态原理 用户发送一次请求,服务器端会检索报文中是否存在sessionid不存在,就分配一个写到cookie当中,存在浏览器的缓存中,当再 ...

  5. VS多平台开发

    Xamarin技术文档------VS多平台开发   此技术业余时间研究,仅供大家学习参考,不涉及深入研究,有一定开发基础的人员,应该都能较快上手. 一.简介 Xamarin始创于2011年,旨在使移 ...

  6. 事件处理(Event Handlers) ng-click操作

    事件处理(Event Handlers) ng-click操作 step 10 本文主要通过介绍ng-click方法来对angularjs中的事件处理方法做个了解. 1.切换目录 git checko ...

  7. Shards

    跟我一起云计算(5)——Shards   什么是sharding Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库 (server)上,从而缓解单一数据库的性能问题.不太严格的 ...

  8. 逻辑回归模型(Logistic Regression, LR)基础

    逻辑回归模型(Logistic Regression, LR)基础   逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函 ...

  9. Day2:T4求逆序对(树状数组+归并排序)

    T4: 求逆序对 A[I]为前缀和 推导 (A[J]-A[I])/(J-I)>=M A[j]-A[I]>=M(J-I) A[J]-M*J>=A[I]-M*I 设B[]=A[]-M*( ...

  10. c#一个简单的实例告诉你,多继承还可以这么来

    我想多继承,要怎么搞???我想你一定会说“接口”,那么你有没有遇到这样的问题,你需要在一个类中继承另外2个类的所有方法,你要怎么做呢???难道要Coyp实现代码?No,往下看... 定义一个空接口比如 ...