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

对数据进行分组并对各组应用一个函数,是数据分析的重要环节。数据准备好之后,通常的任务就是计算分组统计或生成透视表。groupby函数能高效处理数据,对数据进行切片、切块、摘要等操作。可以看出这跟SQL关系密切,但是可用的函数有很多。在本章中,可以学到:

  • 根据一个或多个键(可以是函数、数组或DataFrame列名)拆分pandas对象
  • 计算分组摘要统计,如计数、平均值、标准差、,或自定义函数
  • 对DataFrame的列应用各种各样的函数
  • 应用组内转换或其他运算,如规格化、线性回归、排名或选取子集等
  • 计算透视表和交叉表
  • 执行分位数分析以及其他分组分析

对时间数据的聚合也称重采样(resampling),在第十章介绍。

1、GroupBy技术

很多数据处理过程都经历“拆分-应用-合并”的过程。即根据一个或多个键进行分组、每一个应用函数、再进行合并。

分组键有多种形式:

  • 列表或数组,长度与待分组的轴一样
  • 表示DataFrame某个列明的值
  • 字典或Series,给出待分组轴上的值与分组名之间的对应关系
  • 函数,用于处理轴索引或索引中的各个标签

下面开始写例子。

#-*- encoding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas import Series,DataFrame

df =DataFrame({‘key1‘:list(‘aabba‘),‘key2‘:[‘one‘,‘two‘,‘one‘,‘two‘,‘one‘],
    ‘data1‘:np.random.randn(5),‘data2‘:np.random.randn(5)})
print df,‘\n‘
#根据key1进行分组,并计算data1的均值。
#注意下面的方式,取出来进行分组,而不是在DataFrame中分组,这种方式很灵活
#可以看到这是一个GroupBy对象,具备了应用函数的基础
#这个过程是将Seri进行聚合,产生了新的Series
grouped = df[‘data1‘].groupby(df[‘key1‘])
print grouped,‘\n‘
print grouped.mean(),‘\n‘
means = df[‘data1‘].groupby([df[‘key1‘],df[‘key2‘]]).mean()
print means,‘\n‘ #得到一个层次化索引的DataFrame
print means.unstack(),‘\n‘
#上面的分组键均为Series,实际上,分组键可以是任何长度适当的数组,很灵活
states = np.array([‘Ohio‘,‘California‘,‘California‘,‘Ohio‘,‘Ohio‘])
years = np.array([2005,2005,2006,2005,2006])
print df[‘data1‘].groupby([states,years]).mean(),‘\n‘
#还可以用列名(可以是字符串、数字或其他python对象)用作分组键
print df.groupby(‘key1‘).mean(),‘\n‘  #这里将数值型的列都进行了mean,非数值型的忽略
print df.groupby([‘key1‘,‘key2‘]).mean(),‘\n‘
#groupby以后可以应用一个很有用的size方法
print df.groupby([‘key1‘,‘key2‘]).size(),‘\n‘ #截止翻译版为止,分组键中的缺失值被排除在外
>>>
      data1     data2 key1 key20  1.489789 -1.548474    a  one1 -1.000447 -0.187066    a  two2  0.254255 -0.960017    b  one3  1.279892  1.124993    b  two4 -0.366753  0.139047    a  one 

<pandas.core.groupby.SeriesGroupBy object at 0x03A895B0>

key1
a       0.040863
b       0.767073

key1  key2
a     one     0.561518
      two    -1.000447
b     one     0.254255
      two     1.279892

key2       one       two
key1                   
a     0.561518 -1.000447
b     0.254255  1.279892

California  2005   -1.000447
            2006    0.254255
Ohio        2005    1.384841
            2006   -0.366753

data1     data2
key1                   
a     0.040863 -0.532165
b     0.767073  0.082488

data1     data2
key1 key2                   
a    one   0.561518 -0.704714
     two  -1.000447 -0.187066
b    one   0.254255 -0.960017
     two   1.279892  1.124993

key1  key2
a     one     2
      two     1
b     one     1
      two     1
[Finished in 0.7s]

时间: 2024-08-13 10:01:31

《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算的相关文章

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

对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节.在将数据集加载.融合.准备好之后,通常是计算分组统计或生成透视表.pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作. 关系型数据库和SQL能够如此流行的原因之一就是能够方便地对数据进行连接.过滤.转换和聚合.但是,像SQL这样的查询语言所能执行的分组运算的种类很有限.在本部分你将会看到,由Python和pandas强大的表达能力,我们可以执行复

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

打算从后往前来做笔记 第九章 数据聚合与分组运算 分组 #生成数据,五行四列 df = pd.DataFrame({'key1':['a','a','b','b','a'], 'key2':['one','two','one','two','one'], 'data1':np.random.randn(5), 'data2':np.random.randn(5)}) df #可以按照key1分组计算data1的平均值 df.loc[:,'data1'].groupby(df.loc[:,'key

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

Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4节 透视表和交叉表 第5节 时间序列 第6节 日期的规范.频率以及移动 第7节 时区处理 第8节 时期及算术运算 第9节 重采样及频率转换 第10节 时间序列绘图 groupby 技术 一.实验简介 Python 数据分析(二)需要同学们先行学完 Python 数据分析(一)的课程. 对数据集进行分

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

前言 Python的pandas包提供的数据聚合与分组运算功能很强大,也很灵活.<Python for Data Analysis>这本书第9章详细的介绍了这方面的用法,但是有些细节不常用就容易忘记,遂打算把书中这部分内容总结在博客里,以便复习查看.根据书中的章节,这部分知识包括以下四部分: 1.GroupBy Mechanics(groupby技术) 2.Data Aggregation(数据聚合) 3.Group-wise Operation and Transformation(分组级运

读书笔记第九章

第九章HAL是建立在linux驱动之上的一套程序库.这套程序库并不属于linux内核,而是属于linux内核层之上的应用层.可以用来保护不想公开源代码的作者.HAL架构比较简单,其基本原理就是在安卓系统中使用程序库调用位于内核空间的linux驱动,然后安卓应用程序可以通过NDK程序访问HAL中的程序库,或直接在安卓应用程序中访问HAL中的程序库.编写一款支持HAL的linux驱动程序的步骤:1.编写linux驱动,linux驱动的代码要尽量简介,尽可能将业务逻辑放到HAL library中.2.

《利用Python 进行数据分析》 - 笔记(5)

问题导读: 1.合并数据集 2.重塑和轴向旋转 3.数据转换(待续) 解决方案: 合并数据集 (1)数据库风格的DataFrame合并 pandas的merge 函数 将通过一个或多个键将行连接起来 如果没有指定列,merge 就会直接依据相同列名的那一列进行连接 In [3]: df1 = pd.DataFrame( ...: {'key':['b','b','a','c','a','a','b'], ...: 'data1':range(7)} ...: ) In [4]: df1 Out[

《利用Python进行数据分析》第4章学习笔记

NumPy基础:数组和矢量计算 NumPy的ndarray:一种多维数组对象 该对象是一个快速灵活的大数据集容器.你可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样 列表转换为数组 二维列表 数据类型 其他一些自动生成的数组 arange() ndarray的数据类型 使用astype()方法转换类型,如果将浮点数转换成整数,则小数部分将会被截断,如果某个字符串数组全是数字,也可以用其转换为数值形式 数组和标量之间的运算 数组很重要,因为它使你不用编写循环即可对主句执行

《Python基础教程》 读书笔记 第九章 魔法方法、属性和迭代器(上)

构造方法 在Python中创建一个构造方法很容易.只要把init方法的名字从简单的init修改为魔法版本__init__即可: >>> class FooBar: ...     def __init__(self): ...         self.somevar=42 ... >>> f=FooBar() >>> f.somevar 42 给构造方法传几个参数 >>> class FooBar: ...     def __in

《利用Python 进行数据分析》 - 笔记(3)

问题导读: 1.pandas的数据结构介绍 2.利用pandas对数据的基本操作 3.汇总和计算描述统计方法 4.处理缺失数据 5.层次化索引 解决方案: pandas的数据结构介绍: (1)Series Series 是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及与之相关的数据标签(索引)组成 In [6]: obj = pd.Series([1,2,3,4]) In [7]: obj Out[7]: 0 1 1 2 2 3 3 4 dtype: int64 Serie