Pandas DataFrame.rolling(~) 方法用於使用移動窗口計算統計數據。請注意,窗口隻是用於計算平均值等統計數據的值序列。
參數
1.window | int 或 offset 或 BaseIndexer 子類
移動窗口的大小。
當處理時間序列時,即當源DataFrame的索引為 DatetimeIndex 時,offset表示每個窗口的時間間隔。
2. min_periods | int | optional
窗口中值的最小數量。如果窗口包含少於 min_periods 的觀測值,則返回 NaN 作為該窗口的計算統計量。默認值取決於以下因子:
-
如果窗口是基於偏移的,則
min_periods=1。 -
否則,
min_periods=window。
3. center | boolean | optional
-
如果
True,則觀察值設置為窗口的中心。 -
如果
False,則觀察值設置在窗口的右側。
默認情況下,center=False 。請參閱下麵的示例以進行說明。
4. win_type | string | optional
窗口的類型(例如boxvar,triang)。欲了解更多信息,請谘詢官方文檔open_in_new.
5. on | string | optional
使用 datetime-like 列的標簽代替 DatetimeIndex ,這僅在處理時間序列時相關。
6. axis | int 或 string | optional
是否計算每列或每行的統計信息。默認情況下, axis=0 ,即為每一列計算統計量。
7. closed | string | optional
端點是包含的還是排除的:
|
值 |
說明 |
|---|---|
|
|
|
|
|
|
|
|
兩個端點都包含在內。 |
|
|
兩個端點都是互斥的。 |
默認,
-
對於基於偏移的窗口,
closed="right"。 -
否則,
closed="both"。
返回值
將用於計算某些統計數據的 Window 或 Rolling 對象。
例子
基本用法
考慮以下 DataFrame :
df = pd.DataFrame({"A":[2,4,8,10],"B":[4,5,6,7]}, index=["a","b","c","d"])
df
A B
a 2 4
b 4 5
c 8 6
d 10 7
要使用大小為 2 的移動窗口計算值的總和:
df.rolling(window=2).sum()
A B
a NaN NaN
b 6.0 9.0
c 12.0 11.0
d 18.0 13.0
在此,請注意以下事項:
-
由於
axis=0(默認),我們正在計算每列的統計數據(總和)。 -
window=2表示使用兩個連續觀測值計算總和:-
我們在第一列中得到
6.0因為2+4=6。 -
我們得到
12.0因為4+8=12。 -
我們得到
18.0因為8+10=18。
-
-
我們在第一行得到
NaN,因為在窗口不是基於偏移的情況下,min_periods等於我們為window指定的值。這意味著計算統計數據所需的最小觀測數為2,但對於第一行,窗口中隻有一個數字,因此返回NaN。
指定中心
考慮以下 DataFrame :
df = pd.DataFrame({"A":[2,4,8,10]}, index=["a","b","c","d"])
df
A
a 2
b 4
c 8
d 10
默認情況下, center=False ,這意味著窗口不會以觀察為中心:
df.rolling(window=3, min_periods=0).sum() # center=False
A
a 2.0
b 6.0
c 14.0
d 22.0
這裏,數字的計算方式如下:
A[a]: 2 = 2
A[b]: 2 + 4 = 6 # the observation is 4 (see how 4 is right-aligned)
A[c]: 2 + 4 + 8 = 14 # the observation is 8
A[d]: 4 + 8 + 10 = 22 # the observation is 10
將此與 center=True 的輸出進行比較:
df.rolling(window=3, min_periods=0, center=True).sum()
A
a 6.0
b 14.0
c 22.0
d 18.0
這裏,數字的計算方式如下:
A[a]: 2 + 4 = 6
A[b]: 2 + 4 + 8 = 14 # the observation is 4 (see how 4 is centered here)
A[c]: 4 + 8 + 10 = 22 # the observation is 8
A[d]: 8 + 10 = 18
時間序列案例
考慮以下時間序列 DataFrame:
idx = [pd.Timestamp('20201220 15:00:00'),
pd.Timestamp('20201220 15:00:01'),
pd.Timestamp('20201220 15:00:02'),
pd.Timestamp('20201220 15:00:04'),
pd.Timestamp('20201220 15:00:05')]
df = pd.DataFrame({"A":[1,10,100,1000,10000]}, index=idx)
df
A
2020-12-20 15:00:00 1
2020-12-20 15:00:01 10
2020-12-20 15:00:02 100
2020-12-20 15:00:04 1000
2020-12-20 15:00:05 10000
對周期為 2 秒的窗口求和:
df.rolling(window="2S").sum()
A
2020-12-20 15:00:00 1.0
2020-12-20 15:00:01 11.0
2020-12-20 15:00:02 110.0
2020-12-20 15:00:04 1000.0
2020-12-20 15:00:05 11000.0
請注意,由於窗口是基於偏移量的,因此默認情況下為min_periods=1。
您可以指定 closed 參數來指示端點是否應包含/排除:
df.rolling(window="2S", closed="both").sum() # both endpoints are inclusive
A
2020-12-20 15:00:00 1.0
2020-12-20 15:00:01 11.0
2020-12-20 15:00:02 111.0
2020-12-20 15:00:04 1100.0
2020-12-20 15:00:05 11000.0
相關用法
- Python Pandas DataFrame round方法用法及代碼示例
- Python Pandas DataFrame rank方法用法及代碼示例
- Python Pandas DataFrame rdiv方法用法及代碼示例
- Python Pandas DataFrame radd方法用法及代碼示例
- Python PySpark DataFrame repartition方法用法及代碼示例
- Python PySpark DataFrame replace方法用法及代碼示例
- Python PySpark DataFrame rdd屬性用法及代碼示例
- Python Pandas DataFrame reset_index方法用法及代碼示例
- Python Pandas DataFrame reorder_levels方法用法及代碼示例
- Python Pandas DataFrame rsub方法用法及代碼示例
- Python Pandas DataFrame resample方法用法及代碼示例
- Python Pandas DataFrame reindex方法用法及代碼示例
- Python PySpark DataFrame randomSplit方法用法及代碼示例
- Python Pandas DataFrame replace方法用法及代碼示例
- Python Pandas DataFrame rpow方法用法及代碼示例
- Python Pandas DataFrame rfloordiv方法用法及代碼示例
- Python Pandas DataFrame rtruediv方法用法及代碼示例
- Python Pandas DataFrame rename_axis方法用法及代碼示例
- Python Pandas DataFrame rmod方法用法及代碼示例
- Python Pandas DataFrame rmul方法用法及代碼示例
- Python Pandas DataFrame rename方法用法及代碼示例
- Python Pandas DataFrame empty屬性用法及代碼示例
- Python Pandas DataFrame pop方法用法及代碼示例
- Python Pandas DataFrame nsmallest方法用法及代碼示例
- Python Pandas DataFrame sample方法用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | rolling method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
