groupby()函數(shù)怎么在Pandas中使用-創(chuàng)新互聯(lián)

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

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了松江免費建站歡迎大家使用!

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á)形式,讓人真的有點摸不著頭腦,example給得又少,參數(shù)也不給得很清楚,不過沒有辦法,還是只能選擇原諒他。

groupby我用過的用法

基本用法我這里就不呈現(xiàn)了,我覺得用過一次的人基本不會忘記,這里我主要寫一下我用過的關(guān)系groupby函數(shù)的疑惑:

apply & agg

這個問題著實困擾了我很久,經(jīng)過研究,找了一些可能幫助理解的東西。先舉一個例子:

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]})
 ABCQ
0113LI
11-14ZHANG
2105ZHANG
3216LI
4227WANG
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

 ABC
Q   
LINoneNoneNone
WANGNoneNoneNone
ZHANGNoneNoneNone

從這個例子可以看出,使用apply()處理的對象是一個個的類如DataFrame的數(shù)據(jù)表,然而agg()則每次只傳入一列。

不過我覺得這一點區(qū)別在實際應(yīng)用中分別并不大,因為Ipython的Out輸出對于這兩個函數(shù)幾乎沒有差別,不管是處理一列還是一表。

我覺得agg()有一點讓我很開心就是他可以同時傳入多個函數(shù),簡直不要太方便哈哈:

df.groupby('Q').agg(['mean','std','count','max'])
 ABC
 meanstdcountmaxmeanstdcountmaxmeanstdcountmax
Q            
LI1.50.707107221.00.000000214.52.12132026
WANG2.0NaN122.0NaN127.0NaN17
ZHANG1.00.00000021-0.50.707107204.50.70710725

Plotting

這個也是我剛剛學(xué)會的,groupby的plot簡直不要太方便了:(不過這個例子選的不是很好)

%matplotlib inline
df.groupby('Q').agg(['mean','std','count','max']).plot(kind='bar')
<matplotlib.axes._subplots.AxesSubplot at 0x1133bd710>

groupby( )函數(shù)怎么在Pandas中使用

MultiIndex

這個是困擾我最多的一個問題,因為如果我groupby的時候選擇了兩個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,是一個我可能沒注意過的一個東西,可是后來我發(fā)現(xiàn),這不過是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

如果要選擇某一個index,用`xs()`函數(shù):

Muldf.xs('LI')
 BC
A  
11.03.0
21.06.0

PS:有個問題困擾好久了,怎么把multiindex對象變回原來的形式呢。如:

Multiindex格式如下:(a, b, c, ...),

indexcolumn
(a1,b1,c1)d1
(a2,b2,c2)d2

直接調(diào)用函數(shù)reset_index(),Multiindex中(a, b, c, ...)就變成columns了,index重置為(0,1,2,...), 如下:

index   column
0a1b1c1d1
1a2b2c2d2

上述就是小編為大家分享的groupby( )函數(shù)怎么在Pandas中使用了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前名稱:groupby()函數(shù)怎么在Pandas中使用-創(chuàng)新互聯(lián)
鏈接分享:http://bm7419.com/article38/didopp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、網(wǎng)站設(shè)計商城網(wǎng)站、服務(wù)器托管、標(biāo)簽優(yōu)化靜態(tài)網(wǎng)站

廣告

聲明:本網(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)

成都定制網(wǎng)站網(wǎng)頁設(shè)計