python pandas庫(kù)的rolling函數(shù)用法介紹

rolling 方法用于在時(shí)間序列數(shù)據(jù)或其他數(shù)據(jù)上創(chuàng)建滾動(dòng)窗口(移動(dòng)窗口),然后對(duì)這些窗口應(yīng)用各種聚合函數(shù)迫吐,如求和、平均账忘、最大值志膀、最小值等熙宇。
下面是對(duì) rolling 方法的詳細(xì)介紹和一些常見的用法示例。

1. rolling 方法的基本用法

rolling 方法的基本語(yǔ)法如下:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)

2. 參數(shù)說(shuō)明

  • window:滾動(dòng)窗口的大小溉浙,通常是一個(gè)整數(shù)烫止,表示窗口包含的元素個(gè)數(shù)。對(duì)于時(shí)間序列數(shù)據(jù)戳稽,可以使用偏移量字符串(如 '30D' 表示30天)馆蠕。
  • min_periods:窗口內(nèi)的最小觀測(cè)值數(shù)量,默認(rèn)為窗口大小惊奇。如果窗口內(nèi)的有效數(shù)據(jù)點(diǎn)少于這個(gè)數(shù)量互躬,結(jié)果為 NaN
  • center:是否將標(biāo)簽設(shè)置為窗口中心颂郎,默認(rèn)為 False吨铸,即窗口的標(biāo)簽位于窗口的右端。
  • win_type:窗口類型祖秒,如 boxcar诞吱、triangblackman 等竭缝。默認(rèn)為 None房维,即使用平滑窗口。
  • on:用于對(duì)基于列的時(shí)間序列數(shù)據(jù)進(jìn)行滾動(dòng)窗口計(jì)算抬纸,指定列名咙俩。
  • axis:沿著哪個(gè)軸進(jìn)行滾動(dòng)計(jì)算,默認(rèn)是 0(沿著行)湿故。
  • closed:指定窗口是左閉阿趁、右閉、兩端閉或兩端開的坛猪〔闭螅可以是 rightleft墅茉、bothneither命黔。

3. 示例用法

3.1 創(chuàng)建示例數(shù)據(jù)

import pandas as pd

data = {
    'Date': pd.date_range(start='2021-01-01', periods=10, freq='D'),
    'Sales_Qty': [10, 15, 14, 17, 18, 19, 20, 21, 22, 23]
}
df = pd.DataFrame(data)

3.2 基本滾動(dòng)窗口求和

對(duì) Sales_Qty 列計(jì)算3天滾動(dòng)窗口的和:

df['Rolling_Sum'] = df['Sales_Qty'].rolling(window=3).sum()
print(df)

輸出:

         Date  Sales_Qty  Rolling_Sum
0  2021-01-01         10          NaN
1  2021-01-02         15          NaN
2  2021-01-03         14         39.0
3  2021-01-04         17         46.0
4  2021-01-05         18         49.0
5  2021-01-06         19         54.0
6  2021-01-07         20         57.0
7  2021-01-08         21         60.0
8  2021-01-09         22         63.0
9  2021-01-10         23         66.0

3.3 滾動(dòng)窗口平均值

計(jì)算5天滾動(dòng)窗口的平均值:

df['Rolling_Mean'] = df['Sales_Qty'].rolling(window=5).mean()
print(df)

輸出:

         Date  Sales_Qty  Rolling_Sum  Rolling_Mean
0  2021-01-01         10          NaN           NaN
1  2021-01-02         15          NaN           NaN
2  2021-01-03         14         39.0           NaN
3  2021-01-04         17         46.0           NaN
4  2021-01-05         18         49.0          14.8
5  2021-01-06         19         54.0          16.6
6  2021-01-07         20         57.0          17.6
7  2021-01-08         21         60.0          19.0
8  2021-01-09         22         63.0          20.0
9  2021-01-10         23         66.0          21.0

3.4 時(shí)間序列數(shù)據(jù)的滾動(dòng)窗口

對(duì)日期列設(shè)置索引,并計(jì)算30天滾動(dòng)窗口的和:

說(shuō)明:對(duì)于基于時(shí)間的滾動(dòng)窗口(如 '30D')就斤,即使不顯式設(shè)置 min_periods悍募,pandas 也會(huì)默認(rèn)使用時(shí)間范圍內(nèi)的所有數(shù)據(jù)進(jìn)行計(jì)算,因此不會(huì)出現(xiàn) NaN洋机。

df.set_index('Date', inplace=True)
df['Rolling_Sum_30D'] = df['Sales_Qty'].rolling(window='30D', closed='right').sum()
print(df)

輸出:

            Sales_Qty  Rolling_Sum  Rolling_Mean  Rolling_Sum_30D
Date
2021-01-01         10          NaN           NaN             10.0
2021-01-02         15          NaN           NaN             25.0
2021-01-03         14         39.0           NaN             39.0
2021-01-04         17         46.0           NaN             56.0
2021-01-05         18         49.0          14.8             74.0
2021-01-06         19         54.0          16.6             93.0
2021-01-07         20         57.0          17.6            113.0
2021-01-08         21         60.0          19.0            134.0
2021-01-09         22         63.0          20.0            156.0
2021-01-10         23         66.0          21.0            179.0

3.5 其他滾動(dòng)窗口操作

你可以使用其他聚合函數(shù)坠宴,例如 maxmin绷旗、std 等:

df['Rolling_Max'] = df['Sales_Qty'].rolling(window=3).max()
df['Rolling_Min'] = df['Sales_Qty'].rolling(window=3).min()
df['Rolling_Std'] = df['Sales_Qty'].rolling(window=3).std()
print(df)

輸出:

            Sales_Qty  Rolling_Sum  Rolling_Mean  Rolling_Sum_30D  Rolling_Max  Rolling_Min  Rolling_Std
Date                                                                                                     
2021-01-01         10          NaN           NaN             10.0          NaN          NaN          NaN
2021-01-02         15          NaN           NaN             25.0          NaN          NaN          NaN
2021-01-03         14         39.0           NaN             39.0         15.0         10.0     2.516611
2021-01-04         17         46.0           NaN             56.0         17.0         14.0     1.527525
2021-01-05         18         49.0          14.8             74.0         18.0         14.0     2.081666
2021-01-06         19         54.0          16.6             93.0         19.0         17.0     1.000000
2021-01-07         20         57.0          17.6            113.0         20.0         18.0     1.000000
2021-01-08         21         60.0          19.0            134.0         21.0         19.0     1.000000
2021-01-09         22         63.0          20.0            156.0         22.0         20.0     1.000000
2021-01-10         23         66.0          21.0            179.0         23.0         21.0     1.000000

rolling 方法非常靈活喜鼓,可以在數(shù)據(jù)分析中用于各種滾動(dòng)計(jì)算操作忧设。
你可以根據(jù)具體需求調(diào)整滾動(dòng)窗口的大小和聚合函數(shù),從而實(shí)現(xiàn)對(duì)時(shí)間序列數(shù)據(jù)或其他數(shù)據(jù)的詳細(xì)分析颠通。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市膀懈,隨后出現(xiàn)的幾起案子顿锰,更是在濱河造成了極大的恐慌,老刑警劉巖启搂,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硼控,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胳赌,警方通過(guò)查閱死者的電腦和手機(jī)牢撼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)疑苫,“玉大人熏版,你說(shuō)我怎么就攤上這事『床簦” “怎么了撼短?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)挺勿。 經(jīng)常有香客問(wèn)我曲横,道長(zhǎng),這世上最難降的妖魔是什么不瓶? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任禾嫉,我火速辦了婚禮,結(jié)果婚禮上蚊丐,老公的妹妹穿的比我還像新娘熙参。我一直安慰自己,他們只是感情好麦备,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布尊惰。 她就那樣靜靜地躺著,像睡著了一般泥兰。 火紅的嫁衣襯著肌膚如雪弄屡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天鞋诗,我揣著相機(jī)與錄音膀捷,去河邊找鬼。 笑死削彬,一個(gè)胖子當(dāng)著我的面吹牛全庸,可吹牛的內(nèi)容都是我干的秀仲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼壶笼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼神僵!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起覆劈,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤保礼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后责语,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炮障,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年坤候,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胁赢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡白筹,死狀恐怖智末,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情徒河,我是刑警寧澤吹害,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站虚青,受9級(jí)特大地震影響它呀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜棒厘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一纵穿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奢人,春花似錦谓媒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至支救,卻和暖如春抢野,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背各墨。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工指孤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓恃轩,卻偏偏與公主長(zhǎng)得像结洼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叉跛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容