标签:
对数据进行分组并对各组应用一个函数,是数据分析的重要环节。数据准备好之后,通常的任务就是计算分组统计或生成透视表。groupby函数能高效处理数据,对数据进行切片、切块、摘要等操作。可以看出这跟SQL关系密切,但是可用的函数有很多。在本章中,可以学到:
对时间数据的聚合也称重采样(resampling),在第十章介绍。
1、GroupBy技术
很多数据处理过程都经历“拆分-应用-合并”的过程。即根据一个或多个键进行分组、每一个应用函数、再进行合并。
分组键有多种形式:
下面开始写例子。
#-*- 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