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ù)也不給得很清楚,不過沒有辦法,還是只能選擇原諒他。
基本用法我這里就不呈現(xiàn)了,我覺得用過一次的人基本不會(huì)忘記,這里我主要寫一下我用過的關(guān)系groupby函數(shù)的疑惑:
這個(gè)問題著實(shí)困擾了我很久,經(jīng)過研究,找了一些可能幫助理解的東西。先舉一個(gè)例子:
import pandas as pddf = 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è)的類如DataFrame的數(shù)據(jù)表,然而agg()
則每次只傳入一列。
不過我覺得這一點(diǎn)區(qū)別在實(shí)際應(yīng)用中分別并不大,因?yàn)镮python的Out輸出對(duì)于這兩個(gè)函數(shù)幾乎沒有差別,不管是處理一列還是一表。
我覺得agg()
有一點(diǎn)讓我很開心就是他可以同時(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 |
這個(gè)也是我剛剛學(xué)會(huì)的,groupby的plot簡(jiǎn)直不要太方便了:(不過這個(gè)例子選的不是很好)
%matplotlib inlinedf.groupby('Q').agg(['mean','std','count','max']).plot(kind='bar')
<matplotlib.axes._subplots.AxesSubplot at 0x1133bd710>
這個(gè)是困擾我最多的一個(gè)問題,因?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
我開始甚至以為這應(yīng)該不是dataframe,是一個(gè)我可能沒注意過的一個(gè)東西,可是后來我發(fā)現(xiàn),這不過是MultiIndex形式的一種dataframe罷了。
聯(lián)系客服