對pandas中時間窗函式rolling的使用詳解

2022-10-04 18:39:10 字數 2371 閱讀 9074

在建模過程中,我們常常需要需要對有時間關係的資料進行整理。比如我們想要得到某一時刻過去30分鐘的銷量(產量,速度,消耗量等),傳統方法複雜消耗資源較多,pandas提供的rolling使用簡單,速度較快。

函式原型和引數說明

dataframe.rolling(window, min_periods=none, freq=none, center=false, win_type=none, on=none, axis=0, closed=none)

window:表示時間窗的大小,注意有兩種形式(int or offset)。如果使用int,則數值表示計算統計量的觀測值的數量即向前幾個資料。如果是offset型別,表示時間窗的大小。pandas offset相關可以參考這裡。

min_periods:最少需要有值的觀測點的數量,對於int型別,預設與window相等。對於offset型別,預設為szxnm1。

freq:從0.18版本中已經被捨棄。

center:是否使用window的中間值作為label,預設為false。只能在window是int時使用。

# 為方便觀察,並列排列

df = pd.dataframe()

df.rolling(3, min_periods=1).sum()

df.rolling(3, min_periods=1, center=true).sum()

b b1 b2

0 0.0 0.0 1.0

1 1.0 1.0 3.0

2 2.0 3.0 3.0

3 nan 3.0 6.0

4 4.0程式設計客棧 6.0 4.0

win_type:視窗型別,預設為none一般不特殊指定,了解支援的其他視窗型別,參考這裡。

on:對於dataframe如果不使用index(索引)作為rolling的列,那麼用on來指定使用哪列。

closed:定義區間的開閉,曾經支援int型別的window,新版本已經不支援了。對於offset型別預設是左開右閉的即預設為right。可以根據情況指定為left both等。

axis:方向(軸),一般都是0。

舉例乙個簡單的場景,從a向b運送東西,我們想看一下以3秒作為乙個時間窗運送的量。

# a地有兩個倉庫,都運往b。

df = pd.dataframe(,

index = [pd.timestamp('20130101 09:00:00'),

pd.timestamp('20130101 09:00:01'),

pd.timestamp('20130101 09:00:02'),

pd.timestamp('20130101 09:00:03'),

pd.timestamp('20130101 09:00:04'),

pd.timestamp('20130101 09:00:05'),

pd.timestamp('20130101 09:00:06')])

# 1 2 num

# 2013-01-01 09:00:00 a1 b1 1

# 2013-01-01 09:00:01 a2 b1 2

# 2013-01-01 0szxnm9:00:02 a1 b1 1

# 2013-01-01 09:00:03 a2 b1 3

# 2013-01-01 09:00:04 a2 b1 4

# 2013-01-01 09:00:05 a1 b1 2

# 2013-01-01 09:00:06 a2 b1 1

使用rolling進行計算

# 首先我們先對groupby進行聚合(如果只有從a->b,那麼不用聚合乙個rolling就可以)

# 以9:00:04秒為例,由於時間窗是3s,預設的closed是right,所以我們相加04,03,02秒的num,共有4+3+0=7

df.groupby(['1', '2'])['num'].rolling('3s').sum()

# 1 2

# a1 b1 2013-01-01 09:00:00 1.0

# 2013-01-01 09:00:02 2.0

# 2013-01-01 09:00:05 2.0

# a2 b1 2013-01-01 09:00:01 2.0

# 2013-01-01 09:00:03 5.0

# 2013-01-01 09:00:04 7.0

# 2013-01-01 09:00:06 5.0

# name: num, dtype: float64

由於使用groupby,所以最後的結果是multiindex,想使用正常格式在dataframe上使用reset_index()即可。

本文標題: 對pandas中時間窗函式rolling的使用詳解

本文位址:

對pandas中Series的map函式詳解

series的map方法可以接受乙個函式或含有對映關係的字典型物件。使用map是一種實現元素級轉換以及其他資料清理工作的便捷方式。dataframe中對應的是applymap 函式,當然dataframe還有apply 函式 1 字典對映 import pan程式設計客棧das as pd from...

pandas中的幾個時間序列生成函式

最近在處理跟時間相關的資料,用到了pandas中的datetime的幾個函式,本篇來說一下pandas中幾個常見的時間序列生成函式。pd.date range start none,end none,periods none,freq none,tz none,normalize false,nam...

pandas中to datetime 時間處理

pandas.to datetime arg,errors raise utc none,format none,unit none pandas通常用於處理成組日期,不管這些日期是dataframe的軸索引還是列,to datetime方法可以解析多種不同的日期表示形式。1 獲取指定的時間和日期 ...