亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

pandas之分組groupby()的使用整理與總結(jié)

 更新時(shí)間:2020年06月18日 09:32:21   作者:敲代碼的quant  
這篇文章主要介紹了pandas之分組groupby()的使用整理與總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

在使用pandas的時(shí)候,有些場(chǎng)景需要對(duì)數(shù)據(jù)內(nèi)部進(jìn)行分組處理,如一組全校學(xué)生成績(jī)的數(shù)據(jù),我們想通過(guò)班級(jí)進(jìn)行分組,或者再對(duì)班級(jí)分組后的性別進(jìn)行分組來(lái)進(jìn)行分析,這時(shí)通過(guò)pandas下的groupby()函數(shù)就可以解決。在使用pandas進(jìn)行數(shù)據(jù)分析時(shí),groupby()函數(shù)將會(huì)是一個(gè)數(shù)據(jù)分析輔助的利器。

groupby的作用可以參考 超好用的 pandas 之 groupby 中作者的插圖進(jìn)行直觀的理解:

準(zhǔn)備

讀入的數(shù)據(jù)是一段學(xué)生信息的數(shù)據(jù),下面將以這個(gè)數(shù)據(jù)為例進(jìn)行整理grouby()函數(shù)的使用:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv('./data.csv')
print(df)
   Name Gender Age Score
0   Alen  Male  18   80
1   Bob  Male  19   90
2   Cidy Female  18   93
3  Daniel  Male  20   87
4  Ellen Female  17   96
5 Frankie  Male  21  100
6   Gate  Male  20   88
7   Hebe Female  22   98

基本操作

在進(jìn)行對(duì)groupby函數(shù)進(jìn)行學(xué)習(xí)之前,首先需要明確的是,通過(guò)對(duì)DataFrame對(duì)象調(diào)用groupby()函數(shù)返回的結(jié)果是一個(gè)DataFrameGroupBy對(duì)象,而不是一個(gè)DataFrame或者Series對(duì)象,所以,它們中的一些方法或者函數(shù)是無(wú)法直接調(diào)用的,需要按照GroupBy對(duì)象中具有的函數(shù)和方法進(jìn)行調(diào)用。

grouped = df.groupby('Gender')
print(type(grouped))
print(grouped)

<class 'pandas.core.groupby.groupby.DataFrameGroupBy'>

分組時(shí),不僅僅可以指定一個(gè)列名,也可以指定多個(gè)列名:

grouped = df.groupby('Gender')
grouped_muti = df.groupby(['Gender', 'Age'])

print(grouped.size())
print(grouped_muti.size())

Gender
Female  3
Male   5
dtype: int64

Gender Age
Female 17   1
    18   1
    22   1
Male  18   1
    19   1
    20   2
    21   1
dtype: int64

指定多個(gè)列名個(gè)單個(gè)列名后的區(qū)別在于,分組的主鍵或者索引(indice)將一個(gè)是單個(gè)主鍵,另一個(gè)則是一個(gè)元組的形式:

print(grouped.get_group('Female'))
print(grouped_muti.get_group(('Female', 17)))

  Name Gender Age Score
2  Cidy Female  18   93
4 Ellen Female  17   96
7  Hebe Female  22   98
  Name Gender Age Score
4 Ellen Female  17   96

通過(guò)調(diào)用get_group()函數(shù)可以返回一個(gè)按照分組得到的DataFrame對(duì)象,所以接下來(lái)的使用就可以按照·DataFrame·對(duì)象來(lái)使用。如果想讓這個(gè)DataFrame對(duì)象的索引重新定義可以通過(guò):

df = grouped.get_group('Female').reset_index()
print(df)

  index  Name Gender Age Score
0   2  Cidy Female  18   93
1   4 Ellen Female  17   96
2   7  Hebe Female  22   98

這里可以總結(jié)一下,由于通過(guò)groupby()函數(shù)分組得到的是一個(gè)DataFrameGroupBy對(duì)象,而通過(guò)對(duì)這個(gè)對(duì)象調(diào)用get_group(),返回的則是一個(gè)·DataFrame·對(duì)象,所以可以將DataFrameGroupBy對(duì)象理解為是多個(gè)DataFrame組成的。

而沒有調(diào)用get_group()函數(shù)之前,此時(shí)的數(shù)據(jù)結(jié)構(gòu)任然是DataFrameGroupBy,此時(shí)進(jìn)行對(duì)DataFrameGroupBy按照列名進(jìn)行索引,同理就可以得到SeriesGroupBy對(duì)象,取多個(gè)列名,則得到的任然是DataFrameGroupBy對(duì)象,這里可以類比DataFrameSeries的關(guān)系。

按照上面的思路理解后,再調(diào)用get_group()函數(shù)后得到的DataFrame對(duì)象按照列名進(jìn)行索引實(shí)際上就是得到了Series的對(duì)象,下面的操作就可以按照Series對(duì)象中的函數(shù)行了。

在沒有進(jìn)行調(diào)用get_group(),也就是沒有取出特定某一組數(shù)據(jù)之前,此時(shí)的數(shù)據(jù)結(jié)構(gòu)任然是DataFrameGroupBy,其中也有很多函數(shù)和方法可以調(diào)用,如max()、count()、std()等,返回的結(jié)果是一個(gè)DataFrame對(duì)象。

print(grouped.count())
print(grouped.max()[['Age', 'Score']])
print(grouped.mean()[['Age', 'Score']])

    Name Age Score
Gender         
Female   3  3   3
Male    5  5   5
    Age Score
Gender      
Female  22   98
Male   21  100
     Age   Score
Gender         
Female 19.0 95.666667
Male  19.6 89.000000

如果其中的函數(shù)無(wú)法滿足你的需求,你也可以選擇使用聚合函數(shù)aggregate,傳遞numpy或者自定義的函數(shù),前提是返回一個(gè)聚合值。

def getSum(data):
  total = 0
  for d in data:
    total+=d
  return total


print(grouped.aggregate(np.median))
print(grouped.aggregate({'Age':np.median, 'Score':np.sum}))
print(grouped.aggregate({'Age':getSum}))

aggregate函數(shù)不同于apply,前者是對(duì)所有的數(shù)值進(jìn)行一個(gè)聚合的操作,而后者則是對(duì)每個(gè)數(shù)值進(jìn)行單獨(dú)的一個(gè)操作:

def addOne(data):
  return data + 1

df['Age'] = df['Age'].apply(addOne)
df['Age'] = df['Age'].apply(int)

可視化操作

對(duì)組內(nèi)的數(shù)據(jù)繪制概率密度分布:

grouped['Age'].plot(kind='kde', legend=True)
plt.show()

由于grouped['Age']是一個(gè)SeriesGroupby對(duì)象, 顧名思義, 就是每一個(gè)組都有一個(gè)Series. 所以直接plot相當(dāng)于遍歷了每一個(gè)組內(nèi)的Age數(shù)據(jù)。

REF

groupby官方文檔
超好用的 pandas 之 groupby

到此這篇關(guān)于pandas之分組groupby()的使用整理與總結(jié)的文章就介紹到這了,更多相關(guān)pandas groupby()分組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 解決數(shù)據(jù)庫(kù)寫入時(shí)float自動(dòng)變?yōu)檎麛?shù)的問(wèn)題

    python 解決數(shù)據(jù)庫(kù)寫入時(shí)float自動(dòng)變?yōu)檎麛?shù)的問(wèn)題

    這篇文章主要介紹了python 解決數(shù)據(jù)庫(kù)寫入時(shí)float自動(dòng)變?yōu)檎麛?shù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 你會(huì)使用python爬蟲抓取彈幕嗎

    你會(huì)使用python爬蟲抓取彈幕嗎

    這篇文章主要為大家詳細(xì)介紹了python爬蟲抓取彈幕的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python中的進(jìn)程分支fork和exec詳解

    Python中的進(jìn)程分支fork和exec詳解

    這篇文章主要介紹了Python中的進(jìn)程分支fork和exec詳解,本文用實(shí)例講解fork()的使用,并講解了exec相關(guān)的8個(gè)方法等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Python制作爬蟲采集小說(shuō)

    Python制作爬蟲采集小說(shuō)

    本文給大家分享的是使用Python制作爬蟲采集小說(shuō)的代碼,非常的簡(jiǎn)單實(shí)用,雖然還是有點(diǎn)瑕疵,大家一起改改,共同進(jìn)步
    2015-10-10
  • Python Django模板系統(tǒng)詳解

    Python Django模板系統(tǒng)詳解

    這篇文章主要介紹Django模板系統(tǒng)Django模板系統(tǒng)的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • Python實(shí)現(xiàn)基本線性數(shù)據(jù)結(jié)構(gòu)

    Python實(shí)現(xiàn)基本線性數(shù)據(jù)結(jié)構(gòu)

    這篇文章主要實(shí)現(xiàn)四種數(shù)據(jù)結(jié)構(gòu),分別是數(shù)組、堆棧、隊(duì)列、鏈表。大家都知道可以用C語(yǔ)言實(shí)現(xiàn)這幾種數(shù)據(jù)結(jié)構(gòu),其實(shí)Python也可以實(shí)現(xiàn),下面跟著小編一起來(lái)學(xué)習(xí)。
    2016-08-08
  • python判斷計(jì)算機(jī)是否有網(wǎng)絡(luò)連接的實(shí)例

    python判斷計(jì)算機(jī)是否有網(wǎng)絡(luò)連接的實(shí)例

    今天小編就為大家分享一篇python判斷計(jì)算機(jī)是否有網(wǎng)絡(luò)連接的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn)

    Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn)

    本文主要介紹了Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python開發(fā)一款翻譯工具

    python開發(fā)一款翻譯工具

    這篇文章主要介紹了如何用python開發(fā)一款翻譯工具,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-10-10
  • Python繪制正二十面體圖形示例

    Python繪制正二十面體圖形示例

    正二十面體由20個(gè)小的正三角形面組成,每個(gè)頂點(diǎn)周圍有?5?個(gè)頂點(diǎn),下面這篇文章主要給大家介紹了關(guān)于Python繪制正二十面體圖形的相關(guān)資料,需要的朋友可以參考下
    2022-12-12

最新評(píng)論