中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pandas庫之DataFrame滑動窗口如何實現

發布時間:2023-03-31 11:08:09 來源:億速云 閱讀:108 作者:iii 欄目:開發技術

今天小編給大家分享一下pandas庫之DataFrame滑動窗口如何實現的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

(1)DataFrame的滑動窗口

提供滑動窗口計算,可用于時間序列(時間和日期)數據

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

參數:

window:int, offset, or BaseIndexer subclass
移動窗口的大小,如果是整數,代表每個窗口覆蓋的固定數量;如果是offset(pandas時間序列),代表每個窗口的時間段,每個窗口的大小將根據時間段中包含的觀察值而變化,僅對datetimelike索引有效。

min_periods:int, default None
窗口計算值要求至少有min_periods個觀測值。窗口由時間類型指定,則min_periods默認為1,窗口為整數,則min_periods默認為窗口大小

center:bool, default False
是否將窗口中間索引設為窗口計算后的標簽

win_type:str, default None
觀測值的權重分布。如果為None,則所有點的權重均相等。如果是字符串,要求是 scipy.signal window function函數

on:str, optional
對于 DataFrame,計算滾動窗口所依照的列標簽或索引級別,而不是 DataFrame 的索引

axis:int or str, default 0
如果是0或’index’,按行滾動;如果是1或’columns’,按列滾動

closed:str, default None
‘right’:窗口中的第一個點將從計算中排除;‘left‘:窗口中的最后一個點將從計算中排除;‘both’:窗口中沒有點將從計算中排除;‘neither’:窗口中的第一個點和最后一個點將從計算中排除;默認’right’

Example

窗口大小為2的求和

>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame({'B':[0,1,2,np.nan,4]})
>>> df
     B
0  0.0
1  1.0
2  2.0
3  NaN
4  4.0
>>> df.rolling(2).sum()
     B
0  NaN
1  1.0
2  3.0
3  NaN
4  NaN

窗口為2s的求和

>>> df_time = pd.DataFrame({'B':[0,1,2,np.nan,4]},
		       index = [
		       pd.Timestamp('20130101 09:00:00'),
			   pd.Timestamp('20130101 09:00:02'),
			   pd.Timestamp('20130101 09:00:03'), 
			   pd.Timestamp('20130101 09:00:05'),
			   pd.Timestamp('20130101 09:00:06')])
			                                                   
>>> df_time
                       B
2013-01-01 09:00:00  0.0
2013-01-01 09:00:02  1.0
2013-01-01 09:00:03  2.0
2013-01-01 09:00:05  NaN
2013-01-01 09:00:06  4.0

>>> df_time.rolling('2s').sum()
                       B
2013-01-01 09:00:00  0.0
2013-01-01 09:00:02  1.0
2013-01-01 09:00:03  3.0
2013-01-01 09:00:05  NaN
2013-01-01 09:00:06  4.0

有 2 個觀測值的前視窗口的滾動求和(a和a+1)

# 設置前向窗口
>>> indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=2)
>>> df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})
>>> df.rolling(window=indexer,min_periods=1).sum()
     B
0  1.0
1  3.0
2  2.0
3  4.0
4  4.0

窗口長度為 2 個觀測值的滾動和,但至少需要 1 個觀測值才可計算值

>>> df.rolling(2,min_periods=1).sum()
     B
0  0.0
1  1.0
2  3.0
3  2.0
4  4.0

滾動總和,并將結果分配到窗口索引的中心

>>> df.rolling(3, min_periods=1, center=True).sum()
     B
0  1.0
1  3.0
2  3.0
3  6.0
4  4.0
>>> df.rolling(3, min_periods=1, center=False).sum()
     B
0  0.0
1  1.0
2  3.0
3  3.0
4  6.0

高斯分布窗口

>>> df.rolling(2,win_type='gaussian').sum(std=3)
          B
0       NaN
1  0.986207
2  2.958621
3       NaN
4       NaN

(2)pandas的窗口操作

窗口由從當前觀測值回溯窗口長度組成

>>> import pandas as pd
>>> s = pd.Series(range(5))
>>> s
0    0
1    1
2    2
3    3
4    4
dtype: int64

# 5個分區
>>> for window in s.rolling(window=2):
	print(window)

	
0    0
dtype: int64
0    0
1    1
dtype: int64
1    1
2    2
dtype: int64
2    2
3    3
dtype: int64
3    3
4    4
dtype: int64

panadas支持4種窗口操作

  • Rolling window:值的固定/變動的滑動窗口

  • Weighted window:由 scipy.signal 庫提供的加權非矩形窗口

  • Expanding window:值的累積窗口

  • Exponentially Weighted window:值的累積和指數加權窗

pandas庫之DataFrame滑動窗口如何實現

其中滑動窗口支持時間序列的計算

>>> s = pd.Series(range(5),index = pd.date_range('2020-01-01',periods=5,freq='1D'))
>>> s
2020-01-01    0
2020-01-02    1
2020-01-03    2
2020-01-04    3
2020-01-05    4
Freq: D, dtype: int64
>>> s.rolling(window='2D').sum()
2020-01-01    0.0
2020-01-02    1.0
2020-01-03    3.0
2020-01-04    5.0
2020-01-05    7.0
Freq: D, dtype: float64

部分窗口支持先分組再執行窗口操作

>>> df = pd.DataFrame({'A':['a', 'b', 'a', 'b', 'a'],'B':range(5)})
>>> df
   A  B
0  a  0
1  b  1
2  a  2
3  b  3
4  a  4
>>> df.groupby('A').expanding().sum()
       B
A       
a 0  0.0
  2  2.0
  4  6.0
b 1  1.0
  3  4.0

Rolling window

>>> times = ['2020-01-01', '2020-01-03', '2020-01-04', '2020-01-05', '2020-01-29']
>>> s = pd.Series(range(5),index = pd.DatetimeIndex(times))
>>> s
2020-01-01    0
2020-01-03    1
2020-01-04    2
2020-01-05    3
2020-01-29    4
dtype: int64

# 兩個觀測值的窗口
>>> s.rolling(2).sum()
2020-01-01    NaN
2020-01-03    1.0
2020-01-04    3.0
2020-01-05    5.0
2020-01-29    7.0
dtype: float64

# 兩天的窗口
>>> s.rolling('2D').sum()
2020-01-01    0.0
2020-01-03    1.0
2020-01-04    3.0
2020-01-05    5.0
2020-01-29    4.0
dtype: float64

Centering windows

窗口計算后默認標簽是窗口的最后一個,center可以使中間索引作為標簽

>>> s = pd.Series(range(10))
>>> s.rolling(window=5).mean()
0    NaN
1    NaN
2    NaN
3    NaN
4    2.0
5    3.0
6    4.0
7    5.0
8    6.0
9    7.0
dtype: float64
>>> s.rolling(window=5, center=True).mean()
0    NaN
1    NaN
2    2.0
3    3.0
4    4.0
5    5.0
6    6.0
7    7.0
8    NaN
9    NaN
dtype: float64

Rolling apply

自定義窗口計算公式

>>> import numpy as np
>>> def mad(x):
	return np.fabs(x - x.mean()).mean()

>>> s = pd.Series(range(10))
>>> s.rolling(window=4).apply(mad, raw=True)
0    NaN
1    NaN
2    NaN
3    1.0
4    1.0
5    1.0
6    1.0
7    1.0
8    1.0
9    1.0
dtype: float64

Weighted window

為窗口中的值添加權重

>>> s = pd.Series(range(10))
>>> s.rolling(window=5, win_type="gaussian").mean(std=0.1)
0    NaN
1    NaN
2    NaN
3    NaN
4    2.0
5    3.0
6    4.0
7    5.0
8    6.0
9    7.0
dtype: float64

以上就是“pandas庫之DataFrame滑動窗口如何實現”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武川县| 丹阳市| 秀山| 依安县| 屯门区| 灵山县| 岱山县| 邮箱| 洱源县| 德化县| 榆林市| 浑源县| 仪陇县| 岢岚县| 当阳市| 罗定市| 邵阳市| 肇庆市| 自贡市| 盐池县| 甘德县| 根河市| 五台县| 读书| 怀仁县| 沈阳市| 七台河市| 诏安县| 墨竹工卡县| 慈利县| 晋中市| 大埔区| 安岳县| 寿宁县| 根河市| 工布江达县| 庆城县| 顺昌县| 宁强县| 永城市| 连南|