pandas中df.groupby()方法深入講解
分組:根據(jù)研究目的,將所有樣本點(diǎn)按照一個(gè)或多個(gè)屬性劃分為多個(gè)組,就是分組。
pandas中,數(shù)據(jù)表就是DataFrame對象,分組就是groupby方法。將DataFrame中所有行按照一列或多列來劃分,分為多個(gè)組,列值相同的在同一組,列值不同的在不同組。
分組后,就得到一個(gè)groupby對象,代表著已經(jīng)被分開的各個(gè)組。后續(xù)所有的動作,比如計(jì)數(shù),求平均值等,都是針對這個(gè)對象,也就是都是針對各個(gè)組。即在每個(gè)組組內(nèi)進(jìn)行計(jì)數(shù),求平均值等。
分組的返回結(jié)果
df = pd.DataFrame([['a', 'man', 120, 90],
['b', 'woman', 130, 100],
['a', 'man', 110, 108],
['a', 'woman', 120, 118]], columns=['level', 'gender', 'math','chinese'])
group = df.groupby('gender')
df.groupby() 函數(shù)返回的對象是一系列鍵值對,其中鍵是分組的字段值,值是該字段值下的數(shù)據(jù)表。分組的結(jié)果是無法直接輸出的,print()只能看到該結(jié)果的數(shù)據(jù)類型??梢杂醚h(huán)對分組后的結(jié)果進(jìn)行遍歷。
print(group) # <pandas.core.groupby.generic.DataFrameGroupBy object at 0x11cb60f50> for key, value in group: print(key) print(value) print("") man level gender math chinese 0 a man 120 90 2 a man 110 108 woman level gender math chinese 1 b woman 130 100 3 a woman 120 118
按一列分組:df.groupby(column)
group = df.groupby('gender') # 按照'gender'列的值來分組,創(chuàng)建一個(gè)groupby對象 # group = df.groupby(['gender']) # 等價(jià)寫法 for key, df in group: print(key) print(df) man level gender math chinese 0 a man 120 90 2 a man 110 108 woman level gender math chinese 1 b woman 130 100 3 a woman 120 118
按多列分組:df.groupby([column1, column2])
group = df.groupby(['gender', 'level']) # 先按照'grade'列的值來分組。每組內(nèi),再按'level'列來分組。也返回一個(gè)groupby對象 for key, value in group: print(key) print(value) print("") ('man', 'a') level gender math chinese 0 a man 120 90 2 a man 110 108 ('woman', 'a') level gender math chinese 3 a woman 120 118 ('woman', 'b') level gender math chinese 1 b woman 130 100
查看每組的統(tǒng)計(jì)數(shù)據(jù):df.groupby(column).describe()
對數(shù)據(jù)表中的數(shù)值列進(jìn)行統(tǒng)計(jì),給出包括count = 計(jì)數(shù),mean = 平均數(shù),std = 方差,min = 最小值,25% = 四分位數(shù),50% = 二分位數(shù),75% = 四分之三分位數(shù),max = 最大值的信息。不會對非數(shù)值列統(tǒng)計(jì)。
返回的是一個(gè)dataframe。
查看所有列的統(tǒng)計(jì)信息
group = df.groupby(['gender']) df1 = group.describe() # df1 = df.groupby(['gender']).describe() # 等價(jià)寫法 print(type(df1)) print(df1) <class 'pandas.core.frame.DataFrame'> math chinese \ count mean std min 25% 50% 75% max count gender man 2.0 115.0 7.071068 110.0 112.5 115.0 117.5 120.0 2.0 woman 2.0 125.0 7.071068 120.0 122.5 125.0 127.5 130.0 2.0 mean std min 25% 50% 75% max gender man 99.0 12.727922 90.0 94.5 99.0 103.5 108.0 woman 109.0 12.727922 100.0 104.5 109.0 113.5 118.0
查看指定列的統(tǒng)計(jì)信息
group = df.groupby(['gender']) df1 = group.describe()['math'] # 只看math列的統(tǒng)計(jì)信息 print(df1) count mean std min 25% 50% 75% max gender man 2.0 115.0 7.071068 110.0 112.5 115.0 117.5 120.0 woman 2.0 125.0 7.071068 120.0 122.5 125.0 127.5 130.0
查看縱向視圖
unstack()可以將每列的統(tǒng)計(jì)信息垂直排列。
group = df.groupby(['gender']) df1 = group.describe().unstack() print(df1) gender math count man 2.000000 woman 2.000000 ... max man 120.000000 woman 130.000000 chinese count man 2.000000 woman 2.000000 ... woman 113.500000 max man 108.000000 woman 118.000000 dtype: float64
組內(nèi)離散列計(jì)數(shù):df.groupby(column)[column2].value_counts()
數(shù)據(jù)表中的列按值是否連續(xù),可以分為連續(xù)值列、離散值列。對于離散值列,可以統(tǒng)計(jì)其不重復(fù)值的個(gè)數(shù)。對于連續(xù)值列,統(tǒng)計(jì)不重復(fù)值一般沒有意義。統(tǒng)計(jì)結(jié)果是一個(gè)Series對象。
group = df.groupby(['gender']) df1 = group['level'].value_counts() # 統(tǒng)計(jì)'level'列的不重復(fù)值個(gè)數(shù) print(type(df1)) print(df1) <class 'pandas.core.series.Series'> gender level man a 2 woman a 1 b 1py Name: level, dtype: int64
組內(nèi)數(shù)值列和:df.groupby(column).sum()
group = df.groupby(['gender']) df1 = group.sum() print(df1) math chinese gender man 230 198 woman 250 218
組內(nèi)成員數(shù):df.groupby(column).count()
每組內(nèi),按列統(tǒng)計(jì)每組的成員數(shù)。每列的統(tǒng)計(jì)結(jié)果是一樣的
group = df.groupby(['gender']) df1 = group.count() print(df1) level math chinese gender man 2 2 2 woman 2 2 2
組內(nèi)數(shù)值列均值:df.groupby(column).mean()
每組內(nèi),統(tǒng)計(jì)所有數(shù)值列的均值,非數(shù)值列無均值。
所有組的均值
group = df.groupby(['gender']) df1 = group.mean() print(df1) math chinese gender man 115 99 woman 125 109
單組的均值
group = df.groupby(['gender']) df1 = group['math'].mean() print(df1) gender man 115 woman 125 Name: math, dtype: int64
組內(nèi)數(shù)值列最大值:df.groupby(column).max()
每組內(nèi),統(tǒng)計(jì)所有數(shù)值列的最大值,非數(shù)值列無最大值
統(tǒng)計(jì)所有數(shù)值列的最大值
group = df.groupby(['gender']) df1 = group.max() print(df1) level math chinese gender man a 120 108 woman b 130 118
統(tǒng)計(jì)單個(gè)數(shù)值列的最大值
group = df.groupby(['gender']) df1 = group['math'].max() print(df1) gender man 120 woman 130 Name: math, dtype: int64
組內(nèi)應(yīng)用函數(shù):df.groupby(column1)[column2].apply()
group = df.groupby(['gender']) df1 = group['math'].apply(np.mean) # 求組內(nèi)均值 print(df1) gender man 115.0 woman 125.0 Name: math, dtype: float64
組內(nèi)不同列用不同函數(shù):df.groupby(column).agg({column1:func, column2:func,…})
group = df.groupby(['gender']) df1 = group.agg({'math':np.mean, 'chinese':np.std}) print(df1) math chinese gender man 115 12.727922 woman 125 12.727922
總結(jié)
到此這篇關(guān)于pandas中df.groupby()方法講解的文章就介紹到這了,更多相關(guān)pandas df.groupby()方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- pandas groupby()的使用小結(jié)
- Pandas實(shí)現(xiàn)groupby分組統(tǒng)計(jì)方法實(shí)例
- pandas中g(shù)roupby操作實(shí)現(xiàn)
- pandas?groupby?用法實(shí)例詳解
- Pandas數(shù)據(jù)分析之groupby函數(shù)用法實(shí)例詳解
- pandas中pd.groupby()的用法詳解
- 詳解Pandas中GroupBy對象的使用
- Pandas實(shí)現(xiàn)groupby分組統(tǒng)計(jì)的實(shí)踐
- Pandas中GroupBy具體用法詳解
- Pandas分組函數(shù)groupby的用法詳解
相關(guān)文章
Python+FuzzyWuzzy實(shí)現(xiàn)模糊匹配的示例詳解
在日常開發(fā)工作中,經(jīng)常會遇到這樣的一個(gè)問題:要對數(shù)據(jù)中的某個(gè)字段進(jìn)行匹配,但這個(gè)字段有可能會有微小的差異。本文將分享一個(gè)簡單易用的模糊字符串匹配工具包:FuzzyWuzzy,讓你輕松解決煩惱的匹配問題2022-04-04Python執(zhí)行遺傳編程gplearn庫使用實(shí)例探究
這篇文章主要為大家介紹了Python執(zhí)行遺傳編程gplearn庫使用實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01OpenCV特征提取與檢測之Harris角點(diǎn)檢測
這篇文章主要給大家介紹了關(guān)于OpenCV特征提取與檢測之Harris角點(diǎn)檢測的相關(guān)資料,Harris角點(diǎn)檢測的目的是去分辨出圖像中的平面、邊界以及角點(diǎn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08TensorFlow Session會話控制&Variable變量詳解
今天小編就為大家分享一篇TensorFlow Session會話控制&Variable變量詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07利用Python代碼實(shí)現(xiàn)一鍵摳背景功能
這篇文章主要給大家介紹了關(guān)于如何利用Python代碼實(shí)現(xiàn)一鍵摳背景的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12python實(shí)現(xiàn)機(jī)械分詞之逆向最大匹配算法代碼示例
這篇文章主要介紹了python實(shí)現(xiàn)機(jī)械分詞之逆向最大匹配算法代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12關(guān)于TensorFlow新舊版本函數(shù)接口變化詳解
今天小編就為大家分享一篇關(guān)于TensorFlow新舊版本函數(shù)接口變化詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02