groupby 方法是pandas中的分組方法,對數(shù)據(jù)框采用 groupby 方法后,返回的是 DataFrameGroupBy 對象,一般分組操作后會進行聚合操作。
創(chuàng)新互聯(lián)服務(wù)項目包括織金網(wǎng)站建設(shè)、織金網(wǎng)站制作、織金網(wǎng)頁制作以及織金網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,織金網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到織金省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
對數(shù)據(jù)框按 A 列進行分組,產(chǎn)生分組數(shù)據(jù)框。分組數(shù)據(jù)框是可迭代對象,可以進行循環(huán)遍歷,可以看出在循環(huán)中,每個元素的類型是元組,
元組的第一個元素是分組值,第二個元素是對應(yīng)的分組數(shù)據(jù)框。
可以對分組后的數(shù)據(jù)框直接使用聚合方法 agg ,對分組數(shù)據(jù)框的每一列計算統(tǒng)計函數(shù)值。
可以根據(jù)數(shù)據(jù)框外的序列數(shù)據(jù)對數(shù)據(jù)框進行分組,需要注意 序列長度需要與數(shù)據(jù)框行數(shù)相同 。
可以根據(jù)數(shù)據(jù)框的多列對數(shù)據(jù)框進行分組。
根據(jù) A , B 列進行分組,然后求和。
可以根據(jù)索引對數(shù)據(jù)框進行分組,需要設(shè)置 level 參數(shù)。
數(shù)據(jù)框只有一層索引,設(shè)置參數(shù) level=0 。
當數(shù)據(jù)框索引有多層時,也可以根據(jù)需求設(shè)置 level 參數(shù),完成分組聚合。
設(shè)置 level 參數(shù),如需要根據(jù)第一層索引,即 id1 進行分組,可以設(shè)置 level=0 或 level='id1' 完成分組聚合。
分組后一般會進行聚合操作,用 agg 方法進行聚合。
對分組后數(shù)據(jù)框使用單個函數(shù)進行聚合,單個聚合函數(shù)會對每列進行計算,然后合并返回。聚合函數(shù)以字符串的形式傳入。
可以對分組后的數(shù)據(jù)指定列進行分組聚合。需要注意 子列需要用[]包裹 。
聚合函數(shù)也可以傳入自定義的匿名函數(shù)。
聚合函數(shù)可以是多個函數(shù)。聚合時,多個聚合函數(shù)會對每列進行計算,然后合并返回。聚合函數(shù)以列表的形式傳入。
聚合返回后的數(shù)據(jù)列名有兩層索引,第一層是聚合的列名,第二層是使用的聚合函數(shù)名。如果需要對返回的聚合函數(shù)名重命名,
需要在傳參時,傳入元組,第一個元素為聚合函數(shù)名,第二個元素為聚合函數(shù)。
同樣,也可以傳入匿名函數(shù)。
如果需要對不同的列進行不同的聚合計算,則需要傳入字典的形式。
可以重命名聚合后的列名,注意 只能對一列傳入一個聚合函數(shù)時有效 。
鏈接:
提取碼:7234
煉數(shù)成金:Python數(shù)據(jù)分析。Python是一種面向?qū)ο蟆⒅弊g式計算機程序設(shè)計語言。也是一種功能強大而完善的通用型語言,已經(jīng)具有十多年的發(fā)展歷史,成熟且穩(wěn)定。Python 具有腳本語言中最豐富和強大的類庫,足以支持絕大多數(shù)日常應(yīng)用。 Python語法簡捷而清晰,具有豐富和強大的類庫。它常被昵稱為膠水語言,它能夠很輕松的把用其他語言制作的各種模塊(尤其是C/C++)輕松地聯(lián)結(jié)在一起。
課程將從Python的基本使用方法開始,一步步講解,從ETL到各種數(shù)據(jù)分析方法的使用,并結(jié)合實例,讓學員能從中借鑒學習。
課程目錄:
Python基礎(chǔ)
Python的概覽——Python的基本介紹、安裝與基本語法、變量類型與運算符
了解Python流程控制——條件、循環(huán)語句與其他語句
常用函數(shù)——函數(shù)的定義與使用方法、主要內(nèi)置函數(shù)的介紹
.....
這部分同pandas的gorupby函數(shù)基本相同,實現(xiàn)對數(shù)據(jù)的分組歸類等等。
split·將數(shù)據(jù)分為多個獨立的組。
apply·對各個組進行操作。
combine·將各個組合并為一個數(shù)據(jù)對象。
創(chuàng)建一個dataset
我對官網(wǎng)的例子加以修改以便更好的理解。
解釋下數(shù)據(jù)結(jié)構(gòu),創(chuàng)建了一個二維數(shù)據(jù)u(lat, lon),坐標數(shù)據(jù)為latitude 和country ,強調(diào)一下這里創(chuàng)建的是dataset,而不是dataArray,分不清的可以再看看本系列的第一篇文章。坐標數(shù)據(jù)不等于u的坐標。創(chuàng)建coords部分都指明了latitude 和 country 都是針對lat的擴展。
我們可以這樣理解,對于緯度的分類,我們可以按緯度的大小分,也就是"latitude": [10, 20, 30, 40] ; 我們也可以對緯度所在的國家分,"country": ("x", list("abba") ,那比如我們想求某個國家的數(shù)據(jù)的平均時就十分方便。
下邊我們進行分組:
說明第0和第4個數(shù)是國家a的,第2和第3是國家b的。
.groups換成.mean() 則就是對分組求平均,以此類推。
必須添加一個list才可以將其分類結(jié)果打印出來。直接打印DatasetGroupBy object是不能輸出結(jié)果的。
那么針對經(jīng)緯度的坐標的分組怎么實現(xiàn)呢,比如說選出區(qū)間在多少到多少之間的?
.groupby_bins() 函數(shù)可以解決這一問題。
還是這個數(shù)據(jù),"latitude": [10, 20, 30, 40]
那我們想以25為界,分為兩組,0-25,25-50
在進行了分組后,要對各個分組進行計算。
我們先從dataset 中取出 u 這個dataarray
比如是實現(xiàn)前邊提到的按國家進行數(shù)據(jù)平均,或者標準化
也可以通過map()函數(shù)使用一些自定義的函數(shù),比如說標準化,
這個用法是官方提供的,但是我的Xarray版本過低,還不支持這種用法(Xarray會定期更新,以至于可能我介紹過的一些方法有了更簡便的操作,大家可以在評論區(qū)留言)。
強調(diào)一句,Xarray官方的更新是比較快的,很可能我寫在這里的函數(shù)官方又給出了更新的版本,但是我沒辦法做到時刻與官方最新同步,所以如果遇到問題,最好的解決辦法還是去查閱官方文檔的對應(yīng)部分。
filter 方法可以返回原始對象的子集.
例如,我們想提取分組內(nèi)的和大于 3 的所有分組的元素
filter 的參數(shù)必須是一個函數(shù),函數(shù)參數(shù)是每個分組,并且返回 True 或 False
例如,提取元素個數(shù)大于 2 的分組
另外,我們也可以過濾掉不滿足條件的組,而是返回一個類似索引對象。在這個對象中,沒有通過的分組的元素被 NaN 填充
對于具有多列的 DataFrames ,過濾器應(yīng)明確指定一列作為過濾條件
在進行聚合或轉(zhuǎn)換時,你可能想對每個分組調(diào)用一個實例方法,例如
但是,如果需要傳遞額外的參數(shù)時,它會變得很冗長。我們可以直接使用分派到組對象上的方法
實際上這生成了一個函數(shù)包裝器,在調(diào)用時,它接受所有傳遞的參數(shù),并在每個分組上進行調(diào)用。
然后,這個結(jié)果可以和 agg 和 transform 結(jié)合在一起使用
在上面的例子中,我們按照年份分組,然后對每個分組中使用 fillna 補缺失值
nlargest 和 nsmallest 可以在 Series 類型的 groupby 上使用
對分組數(shù)據(jù)的某些操作可能并不適合聚合或轉(zhuǎn)換。或者說,你可能只是想讓 GroupBy 來推斷如何合并結(jié)果
我們可以使用 apply 函數(shù),例如
改變返回結(jié)果的維度
在 Series 上使用 apply 類似
對于之前的示例數(shù)據(jù)
假設(shè),我們想按 A 分組并計算組內(nèi)的標準差,但是 B 列的數(shù)據(jù)我們并不關(guān)心。
如果我們的函數(shù)不能應(yīng)用于某些列,則會隱式的刪除這些列,所以
直接計算標準差并不會報錯
可以使用分類變量進行分組,分組的順序會按照分類變量的順序
可以使用 pd.Grouper 控制分組,對于如下數(shù)據(jù)
可以按照一定的頻率對特定列進行分組,就像重抽樣一樣
可以分別對列或索引進行分組
類似于 Series 和 DataFrame ,可以使用 head 和 tail 獲取分組前后幾行
在 Series 或 DataFrame 中可以使用 nth() 來獲取第 n 個元素,也可以用于獲取每個分組的某一行
如果你要選擇非空項,可以使用關(guān)鍵字參數(shù) dropna ,如果是 DataFrame ,需要指定為 any 或 all (類似于 DataFrame.dropna(how='any|all') )
與其他方法一樣,使用 as_index=False 分組名將不會作為索引
你也可以傳入一個整數(shù)列表,一次性選取多行
使用 cumcount 方法,可以查看每行在分組中出現(xiàn)的順序
可以使用 ngroup() 查看分組的順序,該順序與 cumcount 的順序相反。
注意 :該順序與迭代時的分組順序一樣,并不是第一次觀測到的順序
前言分組原理
核心:
1.不論分組鍵是數(shù)組、列表、字典、Series、函數(shù),只要其與待分組變量的軸長度一致都可以傳入groupby進行分組。
2.默認axis=0按行分組,可指定axis=1對列分組。
對數(shù)據(jù)進行分組操作的過程可以概括為:split-apply-combine三步:
1.按照鍵值(key)或者分組變量將數(shù)據(jù)分組。
2.對于每組應(yīng)用我們的函數(shù),這一步非常靈活,可以是python自帶函數(shù),可以是我們自己編寫的函數(shù)。
3.將函數(shù)計算后的結(jié)果聚合。
1 分組模式及其對象
1.1 分組的一般模式
三個要素:分組依據(jù)、數(shù)據(jù)來源、操作及其返回結(jié)果
df.groupby(分組依據(jù))[數(shù)據(jù)來源].使用操作
1.2 分組依據(jù)的本質(zhì)
1.3Groupby 對象
通過 ngroups 屬性,可以訪問分為了多少組:
通過 groups 屬性,可以返回從 組名映射到 組索引列表的字典:
當 size 作為 DataFrame 的屬性時,返回的是表長乘以表寬的大小,但在 groupby 對象上表示統(tǒng)計每個組的 元素個數(shù):
通過 get_group 方法可以直接獲取所在組對應(yīng)的行,此時必須知道組的具體名字:
1.4 分組的三大操作
分組的三大操作:聚合、變換和過濾
2.聚合函數(shù)
2.1內(nèi)置聚合函數(shù)
包括如下函數(shù): max/min/mean/median/count/all/any/idxmax/idxmin/mad/nunique/skew/quantile/sum/std/var/sem/size/prod
2.2agg 方法
【a】使用多個函數(shù)
當使用多個聚合函數(shù)時,需要用列表的形式把內(nèi)置聚合函數(shù)的對應(yīng)的字符串傳入,先前提到的所有字符串都是合法的。
【b】對特定的列使用特定的聚合函數(shù)
對于方法和列的特殊對應(yīng),可以通過構(gòu)造字典傳入 agg 中實現(xiàn),其中字典以列名為鍵,以聚合字符串或字符串列表為值。
【c】使用自定義函數(shù)
在 agg 中可以使用具體的自定義函數(shù),需要注意傳入函數(shù)的參數(shù)是之前數(shù)據(jù)源中的列,逐列進行計算
【d】聚合結(jié)果重命名 如果想要對結(jié)果進行重命名,只需要將上述函數(shù)的位置改寫成元組,元組的第一個元素為新的名字,第二個位置為原來的函數(shù),包括聚合字符串和自定義函數(shù)
3 變換和過濾
3.1 變換函數(shù)與 transform 方法
變 換 函 數(shù) 的 返 回 值 為 同 長 度 的 序 列, 最 常 用 的 內(nèi) 置 變 換 函 數(shù) 是 累 計 函 數(shù):cum- count/cumsum/cumprod/cummax/cummin ,它們的使用方式和聚合函數(shù)類似,只不過完成的是組內(nèi) 累計操作。
3.2 組索引與過濾
過濾在分組中是對于組的過濾,而索引是對于行的過濾
組過濾作為行過濾的推廣,指的是如果對一個組的全體所在行進行統(tǒng)計的結(jié)果返回 True 則會被保留,F(xiàn)alse 則該組會被過濾,最后把所有未被過濾的組其對應(yīng)的所在行拼接起來作為 DataFrame 返回。
在 groupby 對象中,定義了 filter 方法進行組的篩選,其中自定義函數(shù)的輸入?yún)?shù)為數(shù)據(jù)源構(gòu)成的 DataFrame 本身,在之前例子中定義的 groupby 對象中,傳入的就是 df[['Height', 'Weight']] ,因此所有表方法和屬性 都可以在自定義函數(shù)中相應(yīng)地使用,同時只需保證自定義函數(shù)的返回為布爾值即可。
4 跨列分組
4.1 apply 的引入
4.2 apply 的使用
在設(shè)計上,apply 的自定義函數(shù)傳入?yún)?shù)與 filter 完全一致,只不過后者只允許返回布爾值
【a】標量情況:結(jié)果得到的是 Series ,索引與 agg 的結(jié)果一致
【b】Series 情況:得到的是 DataFrame ,行索引與標量情況一致,列索引為 Series 的索引
【c】DataFrame 情況:得到的是 DataFrame ,行索引最內(nèi)層在每個組原先 agg 的結(jié)果索引上,再加一層返 回的 DataFrame 行索引,同時分組結(jié)果 DataFrame 的列索引和返回的 DataFrame 列索引一致
網(wǎng)頁標題:python數(shù)據(jù)分組函數(shù) python數(shù)據(jù)分組統(tǒng)計
瀏覽地址:http://jinyejixie.com/article16/dodoidg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、面包屑導航、網(wǎng)站設(shè)計公司、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)