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
诞吱、triang
、blackman
等竭缝。默認(rèn)為None
房维,即使用平滑窗口。 -
on
:用于對(duì)基于列的時(shí)間序列數(shù)據(jù)進(jìn)行滾動(dòng)窗口計(jì)算抬纸,指定列名咙俩。 -
axis
:沿著哪個(gè)軸進(jìn)行滾動(dòng)計(jì)算,默認(rèn)是0
(沿著行)湿故。 -
closed
:指定窗口是左閉阿趁、右閉、兩端閉或兩端開的坛猪〔闭螅可以是right
、left
墅茉、both
或neither
命黔。
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ù)坠宴,例如 max
、min
绷旗、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ì)分析颠通。