這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)groupby( )函數(shù)怎么在Pandas中使用,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

groupby官方解釋
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
Group series using mapper (dict or key function, apply given function to group, return result as series) or by a series of columns.
講真的,非常不能理解pandas官方文檔的這種表達(dá)形式,讓人真的有點(diǎn)摸不著頭腦,example給得又少,參數(shù)也不給得很清楚,不過(guò)沒(méi)有辦法,還是只能選擇原諒他。
groupby我用過(guò)的用法
基本用法我這里就不呈現(xiàn)了,我覺(jué)得用過(guò)一次的人基本不會(huì)忘記,這里我主要寫(xiě)一下我用過(guò)的關(guān)系groupby函數(shù)的疑惑:
apply & agg
這個(gè)問(wèn)題著實(shí)困擾了我很久,經(jīng)過(guò)研究,找了一些可能幫助理解的東西。先舉一個(gè)例子:
import pandas as pd
df = pd.DataFrame({'Q':['LI','ZHANG','ZHANG','LI','WANG'], 'A' : [1,1,1,2,2], 'B' : [1,-1,0,1,2], 'C' : [3,4,5,6,7]})| A | B | C | Q | |
|---|---|---|---|---|
| 0 | 1 | 1 | 3 | LI |
| 1 | 1 | -1 | 4 | ZHANG |
| 2 | 1 | 0 | 5 | ZHANG |
| 3 | 2 | 1 | 6 | LI |
| 4 | 2 | 2 | 7 | WANG |
df.groupby('Q').apply(lambda x:print(x))A B C Q
0 1 1 3 LI
3 2 1 6 LI
A B C Q
0 1 1 3 LI
3 2 1 6 LI
A B C Q
4 2 2 7 WANG
A B C Q
1 1 -1 4 ZHANG
2 1 0 5 ZHANG
df.groupby('Q').agg(lambda x:print(x))0 1
3 2
Name: A, dtype: int64
4 2
Name: A, dtype: int64
1 1
2 1
Name: A, dtype: int64
0 1
3 1
Name: B, dtype: int64
4 2
Name: B, dtype: int64
1 -1
2 0
Name: B, dtype: int64
0 3
3 6
Name: C, dtype: int64
4 7
Name: C, dtype: int64
1 4
2 5
Name: C, dtype: int64
| A | B | C | |
|---|---|---|---|
| Q | |||
| LI | None | None | None |
| WANG | None | None | None |
| ZHANG | None | None | None |
從這個(gè)例子可以看出,使用apply()處理的對(duì)象是一個(gè)個(gè)的類(lèi)如DataFrame的數(shù)據(jù)表,然而agg()則每次只傳入一列。
不過(guò)我覺(jué)得這一點(diǎn)區(qū)別在實(shí)際應(yīng)用中分別并不大,因?yàn)镮python的Out輸出對(duì)于這兩個(gè)函數(shù)幾乎沒(méi)有差別,不管是處理一列還是一表。
我覺(jué)得agg()有一點(diǎn)讓我很開(kāi)心就是他可以同時(shí)傳入多個(gè)函數(shù),簡(jiǎn)直不要太方便哈哈:
df.groupby('Q').agg(['mean','std','count','max'])| A | B | C | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| mean | std | count | max | mean | std | count | max | mean | std | count | max | |
| Q | ||||||||||||
| LI | 1.5 | 0.707107 | 2 | 2 | 1.0 | 0.000000 | 2 | 1 | 4.5 | 2.121320 | 2 | 6 |
| WANG | 2.0 | NaN | 1 | 2 | 2.0 | NaN | 1 | 2 | 7.0 | NaN | 1 | 7 |
| ZHANG | 1.0 | 0.000000 | 2 | 1 | -0.5 | 0.707107 | 2 | 0 | 4.5 | 0.707107 | 2 | 5 |
Plotting
這個(gè)也是我剛剛學(xué)會(huì)的,groupby的plot簡(jiǎn)直不要太方便了:(不過(guò)這個(gè)例子選的不是很好)
%matplotlib inline
df.groupby('Q').agg(['mean','std','count','max']).plot(kind='bar')<matplotlib.axes._subplots.AxesSubplot at 0x1133bd710>

MultiIndex
這個(gè)是困擾我最多的一個(gè)問(wèn)題,因?yàn)槿绻襣roupby的時(shí)候選擇了兩個(gè)level,之后的data總是呈現(xiàn)透視表的形式,如:
Muldf = df.groupby(['Q','A']).agg('mean')
print(Muldf)B C
Q A
LI 1 1.0 3.0
2 1.0 6.0
WANG 2 2.0 7.0
ZHANG 1 -0.5 4.5
我開(kāi)始甚至以為這應(yīng)該不是dataframe,是一個(gè)我可能沒(méi)注意過(guò)的一個(gè)東西,可是后來(lái)我發(fā)現(xiàn),這不過(guò)是MultiIndex形式的一種dataframe罷了。
Muldf.B
Q A
LI 1 1.0
2 1.0
WANG 2 2.0
ZHANG 1 -0.5
Name: B, dtype: float64
如果要選擇某一個(gè)index,用`xs()`函數(shù):
Muldf.xs('LI')| B | C | |
|---|---|---|
| A | ||
| 1 | 1.0 | 3.0 |
| 2 | 1.0 | 6.0 |
PS:有個(gè)問(wèn)題困擾好久了,怎么把multiindex對(duì)象變回原來(lái)的形式呢。如:
Multiindex格式如下:(a, b, c, ...),
| index | column |
| (a1,b1,c1) | d1 |
| (a2,b2,c2) | d2 |
直接調(diào)用函數(shù)reset_index(),Multiindex中(a, b, c, ...)就變成columns了,index重置為(0,1,2,...), 如下:
| index | column | |||
| 0 | a1 | b1 | c1 | d1 |
| 1 | a2 | b2 | c2 | d2 |
上述就是小編為大家分享的groupby( )函數(shù)怎么在Pandas中使用了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當(dāng)前名稱:groupby()函數(shù)怎么在Pandas中使用-創(chuàng)新互聯(lián)
鏈接分享:http://chinadenli.net/article38/didopp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、網(wǎng)站設(shè)計(jì)、商城網(wǎng)站、服務(wù)器托管、標(biāo)簽優(yōu)化、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容