对数据集进行分组并对各组应用一个函数,这是数据分析工作的重要环节。在将数据集准备好之后,通常的任务就是计算分组统计或生成透视表。pandas提供了一个高效的groupby功能,它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作。
groupby的简单介绍
变量grouped是一个GroupBy对象。它还没有进行计算,但是已经分组完毕。
以上是对已经分组完毕的变量的一些计算,同时还涉及到层次化索引以及层次化索引的展开。
groupby还有更加简便得使用方法。
你一定注意到,在执行上面一行代码时,结果中没有key2列,这是因为该列的内容不是数值,俗称麻烦列,所以被从结果中排除了。
无论你准备拿groupby做什么,都会用到size方法,它可以返回一个含有分组大小的Series。
对分组进行迭代
以下是单键值情况
以下是按由多个键值构成元组的分组情况
通过这两个操作分析得知,第一行打印出来的是分组所根据的键值,紧接是按照此分组键值或者键值对得到的分组。
通过字典进行分组
通过函数进行分组
这是一个极具python特色的功能。
如果你想使用的自己的聚合函数,只需要将其传入aggregate或者agg方法即可。
还有describe方法,严格来讲它不是聚类运算,它很好的描述了一个数据集的分组分布情况。
总结一下常用的分组聚类函数。
函数名 | 说明 |
---|---|
count | 分组中的非NA的值的数量 |
sum | 非NA值的和 |
mean | 非NA值得平均值 |
median | 非NA值的算术中位数 |
std var | 标准差,方差 |
max min | 最大值,最小值 |
prod | 非NA值的积 |
first last | 第一个和最后一个非NA值 |
更加高阶的运用
我们拿到一个表格,想添加一个用于存放各索引分组平均值的列。我们可以利用以前学习pandas的表格合并的知识,但是pandas也给我专门提供了更为简便的方法。
经过以上操作,我们可以看出来,凡是key是按照one分组的,如今在people列表里都变成了one里的平均值。这时候我们再自定义函数。
这样就实现了,people表格里的数据减去同类型数据平均值的功能。这个功能叫做距平化,是一个经常使用的操作。是不是很神奇,如果不相信,我们可以来验证一下,按理说减去平均值后,数据的平均值会变成零。
可以看出来,就算不为零,也是很小的数。至于为什么不准确为零,这是由于python的float浮点类型数据自身不够精确的问题,不在我们讨论之内。