2017-03-13 164 views
0

我使用熊貓來處理一些時間序列數據。我有以下格式的數據幀:熊貓數據幀時間序列上的滾動平均值

   Date  Time Reading 
552726 2016/08/01 0: 0: 0 17.28 
552727 2016/08/01 0: 0: 5 17.28 
552728 2016/08/01 0: 0:10 17.21 
552729 2016/08/01 0: 0:15 17.16 
552730 2016/08/01 0: 0:20 17.11 
552731 2016/08/01 0: 0:25 17.08 
552732 2016/08/01 0: 0:30 17.18 
552733 2016/08/01 0: 0:35 17.18 
etc... 

我要平均閱讀列,因此,它需要一個10分鐘的窗口,並計算平均,我想整個時間序列移動該窗口。然後我想將數據幀與新的平均值進行更新,並且還時間戳,所以它看起來像這樣:

  Date  Time  Reading 
552726 2016/08/01 0: 0: 0 17.30 
552727 2016/08/01 0: 10:0 17.35 
552728 2016/08/01 0: 20:0 17.20 
etc... 

什麼是熊貓要做到這一點的最好方法是什麼?我嘗試使用滾動平均法設置滾動窗口的頻率。但是,我必須重新構建數據框架,並自己添加新的時間戳,我認爲這有一個更簡單,更簡單的方法。

謝謝,請讓我知道我是否可以更好地澄清事情。

+1

你每5秒鐘總是有一次觀察嗎? – FLab

+0

是的。採樣率是1個樣本/ 5秒 – entropy4money

+0

那麼爲什麼不使用120個觀測滾動窗口? – FLab

回答

1

給出你的數據,假設我想計算15秒間隔的平均值。 我壓根兒:

#frame contains your data 
n_obs = 3 
result = frame.rolling(window = n_obs, min_periods = 1).mean().iloc[::n_obs,:] 

#   Date  Time Reading 
# 0 2016/08/01 0: 0: 0 17.280000 
# 3 2016/08/01 0: 0:15 17.216667 
# 6 2016/08/01 0: 0:30 17.123333 

其中主要的「絕招」是選擇n_obs的意見多。

這應該適用於你使用n_obs = 120,儘管它意味着計算比你實際需要更多的平均值。

+0

很高興幫助。 還要考慮upvoting如果你找到了答案有用) 一個問題,我發現是時間與具有1個或2 digits.This小時和分鐘,表現形式爲轉換成datetime問題...... 應該說是有益的,我做了這個「雜亂」的線,以一個很好的格式獲得時間(如列表中的例子,但你可以很容易地轉換成熊貓系列)。您可以使用它來了解每個步驟 time = frame.Time.values.tolist() time = map(lambda x:「:」。join(x),[map(lambda x:「{0:0 > 2}「。format(x),el.split(」:「))for el in map(lambda x:x.replace(」「,」「),time)]) – FLab

+0

謝謝。我是熊貓新手。這就是我正在做的,但我仍然在使用iloc方法進行索引。 – entropy4money