對數(shù)據集進行分組并對各組應用一個函數(shù)笛丙,這是數(shù)據分析工作的重要環(huán)節(jié)。在將數(shù)據集準備好之后,通常的任務就是計算分組統(tǒng)計或生成透視表能颁。pandas提供了一個高效的groupby功能,它使你能以一種自然的方式對數(shù)據集進行切片倒淫、切塊伙菊、摘要等操作。
groupby的簡單介紹
變量grouped是一個GroupBy對象敌土。它還沒有進行計算占业,但是已經分組完畢。
以上是對已經分組完畢的變量的一些計算纯赎,同時還涉及到層次化索引以及層次化索引的展開谦疾。
groupby還有更加簡便得使用方法。
你一定注意到犬金,在執(zhí)行上面一行代碼時念恍,結果中沒有key2列,這是因為該列的內容不是數(shù)值晚顷,俗稱麻煩列峰伙,所以被從結果中排除了。
無論你準備拿groupby做什么该默,都會用到size方法瞳氓,它可以返回一個含有分組大小的Series。
對分組進行迭代
以下是單鍵值情況
以下是按由多個鍵值構成元組的分組情況
通過這兩個操作分析得知栓袖,第一行打印出來的是分組所根據的鍵值匣摘,緊接是按照此分組鍵值或者鍵值對得到的分組。
通過字典進行分組
通過函數(shù)進行分組
這是一個極具python特色的功能裹刮。
如果你想使用的自己的聚合函數(shù)音榜,只需要將其傳入aggregate或者agg方法即可。
還有describe方法捧弃,嚴格來講它不是聚類運算赠叼,它很好的描述了一個數(shù)據集的分組分布情況。
總結一下常用的分組聚類函數(shù)违霞。
函數(shù)名 | 說明 |
---|---|
count | 分組中的非NA的值的數(shù)量 |
sum | 非NA值的和 |
mean | 非NA值得平均值 |
median | 非NA值的算術中位數(shù) |
std var | 標準差嘴办,方差 |
max min | 最大值,最小值 |
prod | 非NA值的積 |
first last | 第一個和最后一個非NA值 |
更加高階的運用
我們拿到一個表格买鸽,想添加一個用于存放各索引分組平均值的列涧郊。我們可以利用以前學習pandas的表格合并的知識,但是pandas也給我專門提供了更為簡便的方法癞谒。
經過以上操作底燎,我們可以看出來刃榨,凡是key是按照one分組的,如今在people列表里都變成了one里的平均值双仍。這時候我們再自定義函數(shù)枢希。
這樣就實現(xiàn)了,people表格里的數(shù)據減去同類型數(shù)據平均值的功能朱沃。這個功能叫做距平化苞轿,是一個經常使用的操作。是不是很神奇逗物,如果不相信搬卒,我們可以來驗證一下,按理說減去平均值后翎卓,數(shù)據的平均值會變成零契邀。
可以看出來,就算不為零失暴,也是很小的數(shù)坯门。至于為什么不準確為零,這是由于python的float浮點類型數(shù)據自身不夠精確的問題逗扒,不在我們討論之內古戴。