2013-03-05 58 views
1

我想使用pd.rolling_mean()作爲保持最大信息標準的平滑函數。這意味着端點根據可用信息的不同進行計算。窗口= 3,center = True的示例如下:熊貓:使用帶最大信息標準的rolling_mean()作爲平滑函數?

For Example: Window = 3, Center = True 
ts_smooth[0] = 1/2 * ts[0] + 1/2 * ts[1] 
ts_smooth[0<n<N-1] = 1/3 * ts[n-1] + 1/3 * ts[n] + 1/3 * ts[n+1] 
ts_smooth[N] = 1/2 * ts[N-1] + 1/2 * ts[N] 

在熊貓中實現此目的的最佳方法是什麼?

  1. 計算rolling_mean()爲中點
  2. 寫功能來替換基於窗口大小的結束條件?
+0

關鍵字參數''min_periods''可能是初步認識。 ''pd.rolling_mean(np.arange(5),3,center = True,min_periods = 0)''給出''[0.5,1.,2.,3.,nan]''。在正確的軌道上。 – 2013-03-05 02:47:57

+0

神祕地,傳遞給''min_periods''的_any_值將結果的第一個元素從''nan''改爲''0''。這可能是一個錯誤。 – 2013-03-05 02:54:33

+0

如果沒有將中心設置爲真,則對於任何第i個元素,如果首先收集時間段[i-2,i-1,i]中的元素,如果在這些時間段中發現的元素數量小於min_periods,則會返回楠。雖然將min_periods設置爲1,但它僅收集元素0,因此它會返回均值0.一旦將min_periods設置爲1以上,它將返回nan,因爲您只收集1個元素。 – waitingkuo 2013-03-05 03:35:54

回答

0

你可以使用移位功能,像這樣,

ts_shiftedPlus = ts.shift(1) 
ts_shiftedMinus = ts.shift(-1) 

ts_smooth = 1/3 * ts_shiftedMinus + 1/3 * ts + 1/3 * ts_shiftedPlus 
ts_smooth.ix[0] = 1/2 * ts.ix[0] + 1/2 * ts.ix[1] 
N = len(ts) 
ts_smooth.ix[N] = 1/2 * ts.ix[N-1] + 1/2 * ts.ix[N] 
+0

這對於端點很有效。但是,如果系列中缺少數據 - 需要更多工作。我會爲此做一個功能。 – sanguineturtle 2013-05-22 05:33:07