最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

在使用pandas的時(shí)候,有些場(chǎng)景需要對(duì)數(shù)據(jù)內(nèi)部進(jìn)行分組處理,如一組全校學(xué)生成績(jī)的數(shù)據(jù),我們想通過班級(jí)進(jìn)行分組,或者再對(duì)班級(jí)分組后的性別進(jìn)行分組來進(jìn)行分析,這時(shí)通過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í)之前,首先需要明確的是,通過對(duì)DataFrame對(duì)象調(diào)用groupby()函數(shù)返回的結(jié)果是一個(gè)DataFrameGroupBy對(duì)象,而不是一個(gè)DataFrame或者Series對(duì)象,所以,它們中的一些方法或者函數(shù)是無法直接調(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

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

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é)一下,由于通過groupby()函數(shù)分組得到的是一個(gè)DataFrameGroupBy對(duì)象,而通過對(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ù)無法滿足你的需求,你也可以選擇使用聚合函數(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 修改CSV文件實(shí)例詳解

    Python 修改CSV文件實(shí)例詳解

    這篇文章主要為大家介紹了Python 修改CSV文件實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Python調(diào)整PDF文檔頁邊距的方法小結(jié)

    Python調(diào)整PDF文檔頁邊距的方法小結(jié)

    PDF 文檔中的邊距是指環(huán)繞每頁內(nèi)容的空白區(qū)域,充當(dāng)文本或圖像與頁面邊緣之間的緩沖區(qū),本文將介紹如何使用 Spire.PDF for Python 修改 PDF 文檔的頁邊距,為不同使用場(chǎng)景定制合適的文檔布局,需要的朋友可以參考下
    2024-05-05
  • Python 游戲大作炫酷機(jī)甲闖關(guān)游戲爆肝數(shù)千行代碼實(shí)現(xiàn)案例進(jìn)階

    Python 游戲大作炫酷機(jī)甲闖關(guān)游戲爆肝數(shù)千行代碼實(shí)現(xiàn)案例進(jìn)階

    本篇文章給大家?guī)鞵ython的一個(gè)游戲大制作—機(jī)甲闖關(guān)冒險(xiǎn),數(shù)千行代碼實(shí)現(xiàn)的游戲,過程很詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • 解決pip install的時(shí)候報(bào)錯(cuò)timed out的問題

    解決pip install的時(shí)候報(bào)錯(cuò)timed out的問題

    今天小編就為大家分享一篇解決pip install的時(shí)候報(bào)錯(cuò)timed out的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python 同級(jí)目錄(兄弟目錄)調(diào)用方式

    Python 同級(jí)目錄(兄弟目錄)調(diào)用方式

    這篇文章主要介紹了Python 同級(jí)目錄(兄弟目錄)調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 利用Python如何制作貪吃蛇及AI版貪吃蛇詳解

    利用Python如何制作貪吃蛇及AI版貪吃蛇詳解

    這篇文章主要給大家介紹了關(guān)于利用Python如何制作貪吃蛇及AI版貪吃蛇的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Python中的引用知識(shí)點(diǎn)總結(jié)

    Python中的引用知識(shí)點(diǎn)總結(jié)

    在本文里我們給大家整理了關(guān)于Python中的引用知識(shí)點(diǎn)以及相關(guān)代碼總結(jié),需要的朋友們跟著學(xué)習(xí)下。
    2019-05-05
  • 簡(jiǎn)單理解Python中的事件循環(huán)EventLoop

    簡(jiǎn)單理解Python中的事件循環(huán)EventLoop

    在 python 3中,加入了 asyncio 模塊,來實(shí)現(xiàn)協(xié)程,其中一個(gè)很重要的概念是事件循環(huán),本文我們就來自己實(shí)現(xiàn)一個(gè)相對(duì)簡(jiǎn)單的EventLoop,從而了解一下事件循環(huán)是如何進(jìn)行運(yùn)轉(zhuǎn)的吧
    2023-10-10
  • Python如何讀取、寫入CSV數(shù)據(jù)

    Python如何讀取、寫入CSV數(shù)據(jù)

    這篇文章主要介紹了Python如何讀寫CSV數(shù)據(jù),文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • python向json中追加數(shù)據(jù)的兩種方法總結(jié)

    python向json中追加數(shù)據(jù)的兩種方法總結(jié)

    JSON用來存儲(chǔ)和交換文本信息,比xml更小/更快/更易解析,下面這篇文章主要給大家介紹了關(guān)于python向json中追加數(shù)據(jù)的兩種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05

最新評(píng)論

广丰县| 林西县| 许昌县| 合阳县| 东乡县| 九江市| 巩义市| 栾城县| 信丰县| 纳雍县| 四川省| 县级市| 巴青县| 温泉县| 镇坪县| 洪湖市| 沂南县| 济源市| 自贡市| 乡宁县| 山阴县| 枣阳市| 南康市| 五原县| 米易县| 呼伦贝尔市| 长丰县| 买车| 合作市| 六盘水市| 屯昌县| 同心县| 科技| 罗平县| 商都县| 延边| 城口县| 阿图什市| 抚宁县| 吴堡县| 枣强县|