對(duì)數(shù)據(jù)集進(jìn)行分組并對(duì)各組應(yīng)用一個(gè)函數(shù),這是數(shù)據(jù)分析工作的重要環(huán)節(jié)。在將數(shù)據(jù)集準(zhǔn)備好之后,通常的任務(wù)就是計(jì)算分組統(tǒng)計(jì)或生成透視表。pandas提供了一個(gè)高效的groupby功能,它使你能以一種自然的方式對(duì)數(shù)據(jù)集進(jìn)行切片、切塊、摘要等操作。
groupby的簡(jiǎn)單介紹

變量grouped是一個(gè)GroupBy對(duì)象。它還沒有進(jìn)行計(jì)算,但是已經(jīng)分組完畢。

以上是對(duì)已經(jīng)分組完畢的變量的一些計(jì)算,同時(shí)還涉及到層次化索引以及層次化索引的展開。
groupby還有更加簡(jiǎn)便得使用方法。

你一定注意到,在執(zhí)行上面一行代碼時(shí),結(jié)果中沒有key2列,這是因?yàn)樵摿械膬?nèi)容不是數(shù)值,俗稱麻煩列,所以被從結(jié)果中排除了。
無(wú)論你準(zhǔn)備拿groupby做什么,都會(huì)用到size方法,它可以返回一個(gè)含有分組大小的Series。

對(duì)分組進(jìn)行迭代
以下是單鍵值情況

以下是按由多個(gè)鍵值構(gòu)成元組的分組情況

通過這兩個(gè)操作分析得知,第一行打印出來(lái)的是分組所根據(jù)的鍵值,緊接是按照此分組鍵值或者鍵值對(duì)得到的分組。
通過字典進(jìn)行分組

通過函數(shù)進(jìn)行分組
這是一個(gè)極具python特色的功能。

如果你想使用的自己的聚合函數(shù),只需要將其傳入aggregate或者agg方法即可。

還有describe方法,嚴(yán)格來(lái)講它不是聚類運(yùn)算,它很好的描述了一個(gè)數(shù)據(jù)集的分組分布情況。

總結(jié)一下常用的分組聚類函數(shù)。
| 函數(shù)名 | 說明 |
|---|---|
| count | 分組中的非NA的值的數(shù)量 |
| sum | 非NA值的和 |
| mean | 非NA值得平均值 |
| median | 非NA值的算術(shù)中位數(shù) |
| std var | 標(biāo)準(zhǔn)差,方差 |
| max min | 最大值,最小值 |
| prod | 非NA值的積 |
| first last | 第一個(gè)和最后一個(gè)非NA值 |
更加高階的運(yùn)用
我們拿到一個(gè)表格,想添加一個(gè)用于存放各索引分組平均值的列。我們可以利用以前學(xué)習(xí)pandas的表格合并的知識(shí),但是pandas也給我專門提供了更為簡(jiǎn)便的方法。

經(jīng)過以上操作,我們可以看出來(lái),凡是key是按照one分組的,如今在people列表里都變成了one里的平均值。這時(shí)候我們?cè)僮远x函數(shù)。

這樣就實(shí)現(xiàn)了,people表格里的數(shù)據(jù)減去同類型數(shù)據(jù)平均值的功能。這個(gè)功能叫做距平化,是一個(gè)經(jīng)常使用的操作。是不是很神奇,如果不相信,我們可以來(lái)驗(yàn)證一下,按理說減去平均值后,數(shù)據(jù)的平均值會(huì)變成零。

可以看出來(lái),就算不為零,也是很小的數(shù)。至于為什么不準(zhǔn)確為零,這是由于python的float浮點(diǎn)類型數(shù)據(jù)自身不夠精確的問題,不在我們討論之內(nèi)。