码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-12-14 21:19:49      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

对数据进行分组并对各组应用一个函数,是数据分析的重要环节。数据准备好之后,通常的任务就是计算分组统计或生成透视表。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 key2
0  1.489789 -1.548474    a  one
1 -1.000447 -0.187066    a  two
2  0.254255 -0.960017    b  one
3  1.279892  1.124993    b  two
4 -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]

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

标签:

原文地址:http://www.cnblogs.com/batteryhp/p/5046450.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!