欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

在使用pandas的時候,有些場景需要對數據內部進行分組處理,如一組全校學生成績的數據,我們想通過班級進行分組,或者再對班級分組后的性別進行分組來進行分析,這時通過pandas下的groupby()函數就可以解決。在使用pandas進行數據分析時,groupby()函數將會是一個數據分析輔助的利器。

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

準備

讀入的數據是一段學生信息的數據,下面將以這個數據為例進行整理grouby()函數的使用:

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

基本操作

在進行對groupby函數進行學習之前,首先需要明確的是,通過對DataFrame對象調用groupby()函數返回的結果是一個DataFrameGroupBy對象,而不是一個DataFrame或者Series對象,所以,它們中的一些方法或者函數是無法直接調用的,需要按照GroupBy對象中具有的函數和方法進行調用。

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

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

分組時,不僅僅可以指定一個列名,也可以指定多個列名:

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

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

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

通過調用get_group()函數可以返回一個按照分組得到的DataFrame對象,所以接下來的使用就可以按照·DataFrame·對象來使用。如果想讓這個DataFrame對象的索引重新定義可以通過:

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

這里可以總結一下,由于通過groupby()函數分組得到的是一個DataFrameGroupBy對象,而通過對這個對象調用get_group(),返回的則是一個·DataFrame·對象,所以可以將DataFrameGroupBy對象理解為是多個DataFrame組成的。

而沒有調用get_group()函數之前,此時的數據結構任然是DataFrameGroupBy,此時進行對DataFrameGroupBy按照列名進行索引,同理就可以得到SeriesGroupBy對象,取多個列名,則得到的任然是DataFrameGroupBy對象,這里可以類比DataFrameSeries的關系。

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

在沒有進行調用get_group(),也就是沒有取出特定某一組數據之前,此時的數據結構任然是DataFrameGroupBy,其中也有很多函數和方法可以調用,如max()、count()、std()等,返回的結果是一個DataFrame對象。

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

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

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函數不同于apply,前者是對所有的數值進行一個聚合的操作,而后者則是對每個數值進行單獨的一個操作:

def addOne(data):
  return data + 1

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

可視化操作

對組內的數據繪制概率密度分布:

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

由于grouped['Age']是一個SeriesGroupby對象, 顧名思義, 就是每一個組都有一個Series. 所以直接plot相當于遍歷了每一個組內的Age數據。

REF

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

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

相關文章

  • python 解決數據庫寫入時float自動變?yōu)檎麛档膯栴}

    python 解決數據庫寫入時float自動變?yōu)檎麛档膯栴}

    這篇文章主要介紹了python 解決數據庫寫入時float自動變?yōu)檎麛档膯栴},具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 你會使用python爬蟲抓取彈幕嗎

    你會使用python爬蟲抓取彈幕嗎

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

    Python中的進程分支fork和exec詳解

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

    Python制作爬蟲采集小說

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

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

    這篇文章主要介紹Django模板系統(tǒng)Django模板系統(tǒng)的實現代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-11-11
  • Python實現基本線性數據結構

    Python實現基本線性數據結構

    這篇文章主要實現四種數據結構,分別是數組、堆棧、隊列、鏈表。大家都知道可以用C語言實現這幾種數據結構,其實Python也可以實現,下面跟著小編一起來學習。
    2016-08-08
  • python判斷計算機是否有網絡連接的實例

    python判斷計算機是否有網絡連接的實例

    今天小編就為大家分享一篇python判斷計算機是否有網絡連接的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python?生成多行重復數據的方法實現

    Python?生成多行重復數據的方法實現

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

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

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

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

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

最新評論