2017-08-09 97 views
4

我有一個原始數據集,看起來像這樣:重採樣和熊貓填補丟失的數據

df = pd.DataFrame({'speed': [66.8,67,67.1,70,69], 
        'time': ['2017-08-09T05:41:30.168Z', '2017-08-09T05:41:31.136Z', '2017-08-09T05:41:31.386Z', '2017-08-09T05:41:31.103Z','2017-08-09T05:41:35.563Z' ]}) 

我可以做一些關於它的處理,使其看起來像(去除微秒):

df['time']= pd.to_datetime(df.time) 
df['time'] = df['time'].apply(lambda x: x.replace(microsecond=0)) 

>>> df 
    speed    time 
0 66.8 2017-08-09 05:41:30 
1 67.0 2017-08-09 05:41:31 
2 67.1 2017-08-09 05:41:31 
3 70.0 2017-08-09 05:41:31 
4 69.0 2017-08-09 05:41:35 

我現在需要重新採樣數據,以便到達相同時間戳的任何條目被平均在一起,對於沒有收到任何數據的時間戳,請使用最後一個可用值。像:

speed    time 
0 66.80 2017-08-09 05:41:30 
1 68.03 2017-08-09 05:41:31 
2 70.00 2017-08-09 05:41:32 
3 70.00 2017-08-09 05:41:33 
4 70.00 2017-08-09 05:41:34 
5 69.00 2017-08-09 05:41:35 

我理解這可能涉及使用GROUPBY和重採樣,但作爲一個初學者,我發現自己有這些掙扎。關於如何進行的任何想法?

我都試過,但我得到錯誤的結果:

df.groupby([df["time"].dt.second]).mean() 
      speed 
time   
30 66.800000 
31 68.033333 
35 69.000000 

回答

6
In [279]: df.resample('1S', on='time').mean().ffill() 
Out[279]: 
         speed 
time 
2017-08-09 05:41:30 66.800000 
2017-08-09 05:41:31 68.033333 
2017-08-09 05:41:32 68.033333 
2017-08-09 05:41:33 68.033333 
2017-08-09 05:41:34 68.033333 
2017-08-09 05:41:35 69.000000 
+0

我花了3小時,爲此而努力。不能相信它是如此簡單。謝謝! –

+0

@AlP,很高興我可以幫助:) – MaxU