一、簡介
我們在使用pandas分析處理時間序列數(shù)據(jù)時,經(jīng)常需要對原始時間粒度下的數(shù)據(jù),按照不同的時間粒度進行分組聚合運算,譬如基于每個交易日的股票收盤價,計算每個月的最低和最高收盤價。
而在pandas中,針對不同的應用場景,我們可以使用resample()、groupby()以及Grouper()來非常高效快捷地完成此類任務。
二、在pandas中進行時間分組聚合
在pandas中根據(jù)具體任務場景的不同,對時間序列進行分組聚合可通過以下兩類方式實現(xiàn):
2.1 利用resample()對時序數(shù)據(jù)進行分組聚合
resample原始的意思是「重采樣」,可分為「上采樣」與「下采樣」,而我們通常情況下使用的都是「下采樣」,也就是從高頻的數(shù)據(jù)中按照一定規(guī)則計算出更低頻的數(shù)據(jù),就像我們一開始說的對每日數(shù)據(jù)按月匯總那樣。
如果你熟悉pandas中的groupby()分組運算,那么你就可以很快地理解resample()的使用方式,它本質上就是在對時間序列數(shù)據(jù)進行“分組”,最基礎的參數(shù)為rule,用于設置按照何種方式進行重采樣,就像下面的例子那樣:
可以看到,在上面的例子中,我們對index為日期時間類型的DataFrame應用resample()方法,傳入的參數(shù)'M'是resample第一個位置上的參數(shù)rule,用于確定時間窗口的規(guī)則,譬如這里的字符串'M'就代表「月且聚合結果中顯示對應月的最后一天」,常用的固化的時間窗口規(guī)則如下表所示:
且這些規(guī)則都可以在前面添加數(shù)字實現(xiàn)倍數(shù)效果:
且resample()非常貼心之處在于它會自動幫你對齊到規(guī)整的時間單位上,譬如我們這里只有交易日才會有記錄,如果我們設置的時間單位下無對應記錄,也會為你保留帶有缺失值記錄的時間點:
而通過參數(shù)closed我們可以為細粒度的時間單位設置區(qū)間閉合方式,譬如我們以2日為單位,將closed設置為'right'時,從第一行記錄開始計算所落入的時間窗口時,其對應為時間窗口的右邊界,從而影響后續(xù)所有時間單元的劃分方式:
而即使你的數(shù)據(jù)框index不是日期時間類型,也可以使用參數(shù)on來傳入日期時間列名實現(xiàn)同樣的效果。
2.2 利用groupby()+Grouper()實現(xiàn)混合分組
有些情況下,我們不僅僅需要利用時間類型列來分組,也可能需要包含時間類型在內的多個列共同進行分組,這種情況下我們就可以使用到Grouper()。
它通過參數(shù)freq傳入等價于resample()中rule的參數(shù),并利用參數(shù)key指定對應的時間類型列名稱,但是可以幫助我們創(chuàng)建分組規(guī)則后傳入groupby()中:
且在此種混合分組模式下,我們可以非常方便的配合apply、transform等操作,這里就不再贅述。
填寫下面表單即可預約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業(yè)?一地學習,可推薦就業(yè)!
?2007-2022/ m.lb577.com 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc