<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pandas中g(shù)roupby的這些用法你都知道嗎?

          共 2051字,需瀏覽 5分鐘

           ·

          2020-07-28 12:17


          導(dǎo)讀

          pandas作為Python數(shù)據(jù)分析的瑞士軍刀,集成了大量實用的功能接口,基本可以實現(xiàn)數(shù)據(jù)分析一站式處理。前期,筆者完成了一篇pandas系統(tǒng)入門教程,也針對幾個常用的分組統(tǒng)計接口進行了介紹,今天再針對groupby分組聚合操作進行拓展講解。



          01 如何理解pandas中的groupby操作


          groupby是pandas中用于數(shù)據(jù)分析的一個重要功能,其功能與SQL中的分組操作類似,但功能卻更為強大。理解groupby的原理可參考官網(wǎng)給出的解釋:

          其中:

          • split:按照某一原則(groupby字段)進行拆分,相同屬性分為一組

          • apply:對拆分后的各組執(zhí)行相應(yīng)的轉(zhuǎn)換操作

          • combine:輸出匯總轉(zhuǎn)換后的各組結(jié)果





          02 分組(split)——groupby


          groupby首先要指定分組原則,這也是groupby函數(shù)的第一步,其常用參數(shù)包括:

          • by,分組字段,可以是列名/series/字典/函數(shù),常用為列名

          • axis,指定切分方向,默認為0,表示沿著行切分

          • as_index,是否將分組列名作為輸出的索引,默認為True;當設(shè)置為False時相當于加了reset_index功能

          • sort,與SQL中g(shù)roupby操作會默認執(zhí)行排序一致,該groupby也可通過sort參數(shù)指定是否對輸出結(jié)果按索引排序


          另有其他參數(shù),但很少用到不再列出。給出幾個典型應(yīng)用示例:
          示例數(shù)據(jù)
          • 單列作為分組字段,不設(shè)置索引


          • 單列字段的轉(zhuǎn)換格式作為分組字段


          • 字典,根據(jù)索引對記錄進行映射分組


          • 函數(shù),根據(jù)函數(shù)對索引的執(zhí)行結(jié)果進行分組




          03 轉(zhuǎn)換(apply)——agg/apply/transform


          分組之后的第二個步驟即為分組轉(zhuǎn)換操作,也就是應(yīng)用(apply)一定的函數(shù)得到相應(yīng)的結(jié)果。常用的執(zhí)行操作方式有4種:

          • 直接加聚合函數(shù),但只能實現(xiàn)單一功能,常用聚合函數(shù)包括:mean/sum/median/min/max/last/first等,最為簡單直接的聚合方式


          • agg(或aggregate),執(zhí)行更為豐富的聚合功能,常用列表、字典等形式作為參數(shù)


          例如需要對如上數(shù)據(jù)表中兩門課程分別統(tǒng)計平均分和最低分,則可用列表形式傳參如下:


          如果想對語文課求平均分和最低分,而數(shù)學(xué)課求平均分和最高分,則可用字典形式參數(shù):


          • apply,除了agg豐富的可選聚合函數(shù)外,apply還可以自定義面向分組的聚合函數(shù)


          這里apply函數(shù)實際上是一個應(yīng)用非常廣泛的轉(zhuǎn)換函數(shù),例如面向series對象,apply函數(shù)的處理粒度是series的每個元素(標量);面向dataframe對象,apply函數(shù)的處理粒度是dataframe的一行或一列(series對象);而現(xiàn)在面向groupby后的group對象,其處理粒度則是一個分組(dataframe對象)。例如,需要計算每個班級語文平均分與數(shù)學(xué)平均分之差,則用apply會是一個理想的選擇:


          • transform,又一個強大的groupby利器,其與agg和apply的區(qū)別相當于SQL中窗口函數(shù)和分組聚合的區(qū)別:transform并不對數(shù)據(jù)進行聚合輸出,而只是對每一行記錄提供了相應(yīng)聚合結(jié)果;而后兩者則是聚合后的分組輸出。


          例如,想對比個人成績與班級平均分,則如下操作會是首選:


          當然,這一操作也可以通過mean聚合+merge連接實現(xiàn):

          實際上,pandas中幾乎所有需求都存在不止一種實現(xiàn)方式!




          04 時間序列的groupby——resample


          再次指出,groupby相當于是按照某一規(guī)則對數(shù)據(jù)進行分組聚合,當分組的規(guī)則是時間序列時,還存在另一種特殊的分組方式——重采樣resample。理解groupby的split-apply-combine三步走處理流程,那么自然也很容易理解resample處理流程:按照時間split——apply——combine。同時,也正因為resample是一種特殊的分組聚合,所以groupby的4種轉(zhuǎn)換操作自然也都適用于resample。


          生成以下含有時間序列的樣例數(shù)據(jù):


          需統(tǒng)計每15天的平均分數(shù),用resample可實現(xiàn)如下:


          當然,這是直接用了聚合函數(shù),更復(fù)雜的例如agg、apply和transform等用法也是一樣的。換句話說,resample與groupby的核心區(qū)別僅在于split階段:前者按照時間間隔進行分組,而后者是按照定義的某種規(guī)則進行分組。


          另外,還可將groupby與resample鏈式使用,但僅可以是resample在groupby之后,反之則會報錯。例如:

          需要指出,resample等價于groupby操作一般是指下采樣過程;同時,resample也支持上采樣,此時需設(shè)置一定規(guī)則進行插值填充。

          python爬蟲人工智能大數(shù)據(jù)公眾號


          瀏覽 28
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日日躁狠狠躁夜夜躁A片图片 | 亚洲国产精品午夜AV | 俺去骚| 成人在线性爱视频 | 午夜操一操一级 |