2017-02-07 40 views
2

我有在公里每小時速度列中的熊貓數據幀,以及時間戳列:如何找到大熊貓數據框中諧波平均速度

Date,      Speed 
2016-07-07 13:38:02.000, 50.718590 
2016-07-18 11:28:00.000, 2.357645 
2016-07-15 15:03:08.000, 14.652172 
2016-07-18 06:53:00.000, 24.530390 
...      ... 
2016-07-18 18:41:31.000, 31.761416 
2016-07-14 05:28:42.187, 7.532758 

我想是有,每次15分鐘harmonic average speed在平均每天:

Time, Speed 
00:00, 32 
00:15, 10 
00:30, 12 
00:45, 41 
01:00, 12 
... 
23:30, 30 
23:45, 31 

我最初的嘗試是從每一個時間戳刪除的日期,將其設置爲指標,並使用TimeGrouper找到平均值。 (我的數據框被稱爲輸出)的代碼是:

Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Int64Index' 
+0

提取作爲一個字符串只是時間你能嘗試沒有第一行,你只改變你的日期時間,只是'output = output.set_index(['Date']) output = output.groupby(pd.TimeGrouper('15Min'))。mean()' – EdChum

+0

它不會創建錯誤,但是它會創建從第一個日期到最後一個日期每15分鐘的平均速度,而我會螞蟻每天平均爲一個。 –

+0

好吧,你可以做的一件事就是通過這個'pd.to_datetime(df ['date']。dt.strftime('%H:%M:%S'))來標準化日期''這會將日期設置爲對所有參賽作品都是一樣的,那麼你可以做你之前做的事情 – EdChum

回答

2

我想你想要做的是標準化的日期是什麼:

output['Speed'] = output['Speed']**-1 
output['Date'] = output['Date'].apply(lambda d : d.time()) 
output = output.set_index(['Date']) 
output = output.groupby(pd.TimeGrouper('15Min')).mean() 
output['Speed'] = output['Speed']**-1 

的代碼沒有然而由於它給了我一個錯誤的工作,那麼你做的重採樣:

In [177]: 
df['Date'] = pd.to_datetime(df['Date'].dt.strftime('%H:%M:%S')) 
df 

Out[177]: 
       Date  Speed 
0 2017-02-07 13:38:02 50.718590 
1 2017-02-07 11:28:00 2.357645 
2 2017-02-07 15:03:08 14.652172 
3 2017-02-07 06:53:00 24.530390 
4 2017-02-07 18:41:31 31.761416 
5 2017-02-07 05:28:42 7.532758 

現在所有日期相同,默認情況下,今天的日期,然後做你想要什麼:

In [178]: 
output = df.set_index('Date') 
output = output.groupby(pd.TimeGrouper('15Min')).mean() 
output['Speed'] = output['Speed']**-1 
output 

Out[178]: 
         Speed 
Date       
2017-02-07 05:15:00 0.132754 
2017-02-07 05:30:00  NaN 
2017-02-07 05:45:00  NaN 
2017-02-07 06:00:00  NaN 
2017-02-07 06:15:00  NaN 
2017-02-07 06:30:00  NaN 
2017-02-07 06:45:00 0.040766 
2017-02-07 07:00:00  NaN 
2017-02-07 07:15:00  NaN 
2017-02-07 07:30:00  NaN 
2017-02-07 07:45:00  NaN 
2017-02-07 08:00:00  NaN 
2017-02-07 08:15:00  NaN 
2017-02-07 08:30:00  NaN 
2017-02-07 08:45:00  NaN 
2017-02-07 09:00:00  NaN 
2017-02-07 09:15:00  NaN 
2017-02-07 09:30:00  NaN 
2017-02-07 09:45:00  NaN 
2017-02-07 10:00:00  NaN 
2017-02-07 10:15:00  NaN 
2017-02-07 10:30:00  NaN 
2017-02-07 10:45:00  NaN 
2017-02-07 11:00:00  NaN 
2017-02-07 11:15:00 0.424152 
2017-02-07 11:30:00  NaN 
2017-02-07 11:45:00  NaN 
2017-02-07 12:00:00  NaN 
2017-02-07 12:15:00  NaN 
2017-02-07 12:30:00  NaN 
2017-02-07 12:45:00  NaN 
2017-02-07 13:00:00  NaN 
2017-02-07 13:15:00  NaN 
2017-02-07 13:30:00 0.019717 
2017-02-07 13:45:00  NaN 
2017-02-07 14:00:00  NaN 
2017-02-07 14:15:00  NaN 
2017-02-07 14:30:00  NaN 
2017-02-07 14:45:00  NaN 
2017-02-07 15:00:00 0.068249 
2017-02-07 15:15:00  NaN 
2017-02-07 15:30:00  NaN 
2017-02-07 15:45:00  NaN 
2017-02-07 16:00:00  NaN 
2017-02-07 16:15:00  NaN 
2017-02-07 16:30:00  NaN 
2017-02-07 16:45:00  NaN 
2017-02-07 17:00:00  NaN 
2017-02-07 17:15:00  NaN 
2017-02-07 17:30:00  NaN 
2017-02-07 17:45:00  NaN 
2017-02-07 18:00:00  NaN 
2017-02-07 18:15:00  NaN 
2017-02-07 18:30:00 0.031485 

所以這樣的:

df['Date'] = pd.to_datetime(df['Date'].dt.strftime('%H:%M:%S')) 

這樣做是使用dt.strftime,我們就可以使用to_datetime做出datetime64系列所有日期相同