python-----数据聚合与分组运算

        对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分 析工作中的重要环节。在将数据集加载、融合、准备好之后,通常就是计算分组统 计或生成透视表。pandas提供了一个灵活高效的gruopby功能,它使你能以一种自 然的方式对数据集进行切片、切块、摘要等操作。

        关系型数据库和SQL(Structured Query Language,结构化查询语言)能够如此流 行的原因之一就是其能够方便地对数据进行连接、过滤、转换和聚合。但是,像 SQL这样的查询语言所能执行的分组运算的种类很有限,由 于Python和pandas强大的表达能力,我们可以执行复杂得多的分组运算(利用任何 可以接受pandas对象或NumPy数组的函数)。

GroupBy机制:Hadley Wickham(许多热门R语言包的作者)创造了一个用于表示分组运算的术 语"split-apply-combine"(拆分-应用-合并)。第一个阶段,pandas对象(无论 是Series、DataFrame还是其他的)中的数据会根据你所提供的一个或多个键被拆 分(split)为多组。拆分操作是在对象的特定轴上执行的。例如,DataFrame可以 在其行(axis=0)或列(axis=1)上进行分组。然后,将一个函数(例:sum(); mean(); median; argmax()等)应用(apply)到 各个分组并产生一个新值。最后,所有这些函数的执行结果会被合并(combine) 到最终的结果对象中。结果对象的形式一般取决于数据上所执行的操作。下图大致说明了一个简单的分组聚合过程。

python-----数据聚合与分组运算_第1张图片

 新建一个dataframe:

data = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'], 
                     'key2':['one', 'two', 'one', 'two', 'one'], 
                     'dat1': np.random.randn(5),
                     'dat2': np.random.rand(5)})

python-----数据聚合与分组运算_第2张图片

1 、假设想要按key1进行分组,并计算data1列的平均值。实现该功能的方式有很 多,而我们这里要用的是:访问data1,并根据key1调用groupby: 

grouped = data['dat1'].groupby(data['key1'])

python-----数据聚合与分组运算_第3张图片

此时,变量grouped是一个GroupBy对象。它实际上还没有进行任何计算,只是含有一些 有关分组键data['key1']的中间数据而已。换句话说,该对象已经有了接下来对各分组 执行运算所需的一切信息。例如,我们可以调用GroupBy的mean方法来计算分组 平均值或求和: 

python-----数据聚合与分组运算_第4张图片

 python-----数据聚合与分组运算_第5张图片

 在这里,数据(Series)根据分组 键进行了聚合,产生了一个新的Series,其索引为key1列中的唯一值。之所以结果 中索引的名称为key1,是因为原始DataFrame的列data['key1']就叫这个名字。 如果我们一次传入多个数组的列表,就会得到不同的结果:

 means = data['dat1'].groupby([data['key1'], data['key2']]).mean()

python-----数据聚合与分组运算_第6张图片

你可能感兴趣的:(numpy,pandas,数据分析)