2015-09-29 35 views
2

我有一個熊貓數據框,其中包含不同時間尺度的信息,即某些時期我每秒鐘有100個數據點,其他時期我每分鐘有1個數據點。熊貓 - 重採樣 - 下采樣前的上採樣

我的目標是用固定的時間窗(例如:1秒)重新採樣這個數據幀,使用上次採樣時的正則化和下采樣的均值。另外,我希望指定算法執行這兩種操作(縮減採樣和上採樣)的順序,因爲我需要上採樣(使用最後一個)首先執行,而下采樣(使用均值)僅在之後執行。

這是否可以使用熊貓重採樣功能?例如,在下面的示例代碼中,我希望結果數據框中包含以下值:0到10秒之間的0.5(平均值),10到19秒之間的0(最後一個)以及19和10之間的10 39秒。

import pandas as pd 
import numpy as np 

df1 = pd.DataFrame({'value' : np.repeat(1,10)}, index=pd.date_range('2010-01-01 00:00:00', periods=10, freq='1S')) 
df2 = pd.DataFrame({'value' : np.repeat(0,10)}, index=pd.date_range('2010-01-01 00:00:00.5', periods=10, freq='1S')) 
df3 = pd.DataFrame({'value' : np.repeat(10,3)}, index=pd.date_range('2010-01-01 00:00:19', periods=3, freq='10S')) 

df = pd.concat([df1, df2, df3], axis=0) 
df = df.sort_index() 

df.resample(rule='1S', fill_method='ffill', kind='timestamp', how='mean') 

你是怎麼建議我解決這個問題的?

編輯:我真正的數據框很大,所以我想盡量減少操作的數量,特別是那些涉及對象複製。

回答

1

首先你的傳統重採樣與採樣:

df_new = df.resample(rule='1S') 

其次採樣,你update你的下采樣數據,但不覆蓋它。您填寫與填充向前向上取樣數據的空白:

df_new.update(df.resample(rule='1S', fill_method='ffill', kind='timestamp', how='last'), 
       overwrite=False) 

>>> df_new 
        value 
2010-01-01 00:00:00 0.5 
2010-01-01 00:00:01 0.5 
2010-01-01 00:00:02 0.5 
2010-01-01 00:00:03 0.5 
2010-01-01 00:00:04 0.5 
2010-01-01 00:00:05 0.5 
2010-01-01 00:00:06 0.5 
2010-01-01 00:00:07 0.5 
2010-01-01 00:00:08 0.5 
2010-01-01 00:00:09 0.5 
2010-01-01 00:00:10 0.0 
2010-01-01 00:00:11 0.0 
2010-01-01 00:00:12 0.0 
2010-01-01 00:00:13 0.0 
2010-01-01 00:00:14 0.0 
2010-01-01 00:00:15 0.0 
2010-01-01 00:00:16 0.0 
2010-01-01 00:00:17 0.0 
2010-01-01 00:00:18 0.0 
2010-01-01 00:00:19 10.0 
2010-01-01 00:00:20 10.0 
2010-01-01 00:00:21 10.0 
2010-01-01 00:00:22 10.0 
2010-01-01 00:00:23 10.0 
2010-01-01 00:00:24 10.0 
2010-01-01 00:00:25 10.0 
2010-01-01 00:00:26 10.0 
2010-01-01 00:00:27 10.0 
2010-01-01 00:00:28 10.0 
2010-01-01 00:00:29 10.0 
2010-01-01 00:00:30 10.0 
2010-01-01 00:00:31 10.0 
2010-01-01 00:00:32 10.0 
2010-01-01 00:00:33 10.0 
2010-01-01 00:00:34 10.0 
2010-01-01 00:00:35 10.0 
2010-01-01 00:00:36 10.0 
2010-01-01 00:00:37 10.0 
2010-01-01 00:00:38 10.0 
2010-01-01 00:00:39 10.0 

不能混合上採樣/在一個單一的resample操作下采樣。我不確定爲什麼操作順序對您來說很重要,只要您獲得理想的結果即可。

+0

感謝您的回答,我不清楚您必須多次調用resample。 –