2017-07-18 116 views
2

我有一個數據幀,看起來像下面這樣:轉換不規則時間序列數據每小時在python熊貓

   read   value 
0  2013-01-07 05:00:00  29.0 
1  2013-01-08 15:00:00  4034.0 
2  2013-01-09 20:00:00 256340.0 
3  2013-01-10 20:00:00 343443.0 
4  2013-01-11 20:00:00 4642435.0 
5  2013-01-12 15:00:00 544296.0 
6  2013-01-13 20:00:00 700000.0 
7  2013-01-14 20:00:00 782335.0 
8  2013-01-15 19:00:00 900000.0 
9  2013-01-16 20:00:00 959130.0 
10 2013-01-17 19:00:00 1114343.0 
11 2013-01-18 20:00:00 1146230.0 
12 2013-01-19 20:00:00 1247793.0 
13 2013-01-20 20:00:00 1343376.0 

我想將它轉化和規範,使其顯示一段時間內每小時消耗。到目前爲止,我有以下

import numpy as np 
import pandas as pd 

#caluclates hourly delta 
current['hour_delta'] = (current['read'] - current['read'].shift()).fillna(0).astype('timedelta64[h]') 


#adds end date and then amount per hours 
current['end_date'] = current['read'] + pd.to_timedelta(current['hour_delta'], unit='h') 
current['infer_hour'] = current['value']/current['hour_delta'] 

我然後創建一系列

#create hourly time series 
result = pd.Series(0, index=pd.date_range(start=current['read'].min(), end=current['read'].max(), freq='h')) 

但是在這裏,我一直無法弄清楚如何將每小時的速度應用到系列。

+0

平均需要'pandas.DatetimeIndex()。重新取樣()',它不正是你想要的。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.resample.html – DyZ

+0

我會如何在這種情況下應用它?我有一種感覺,我讓這個過於複雜 – user3609179

+0

我提供了一個鏈接到文檔。它有例子。 – DyZ

回答

2

您可以每小時在read列上重新採樣。然後插入以填充空值。然後把每一行與下一行的差異。

例如,在2013-01-07 05:00:002013-01-08 15:00:00之間有34小時。如果非要分發4034超過34小時,然後每一個小時應該是4034/34118.647059

current.set_index('read').value.cumsum().resample('H').sum().interpolate().diff() 

read 
2013-01-07 05:00:00    NaN 
2013-01-07 06:00:00  118.647059 
2013-01-07 07:00:00  118.647059 
2013-01-07 08:00:00  118.647059 
2013-01-07 09:00:00  118.647059 
2013-01-07 10:00:00  118.647059 
2013-01-07 11:00:00  118.647059 
2013-01-07 12:00:00  118.647059 
2013-01-07 13:00:00  118.647059 
2013-01-07 14:00:00  118.647059 
2013-01-07 15:00:00  118.647059 
2013-01-07 16:00:00  118.647059 
2013-01-07 17:00:00  118.647059 
2013-01-07 18:00:00  118.647059 
2013-01-07 19:00:00  118.647059 
... 
+0

我想顯示所有小時的平均小時費率。這就是爲什麼我創建結果系列 – user3609179

+0

@ user3609179是的!我想我已經證明 – piRSquared

+0

對我來說是正確的。我似乎得到這個錯誤ValueError:不能從重複軸重新索引 – user3609179