2013-03-08 102 views
15

我有以下15分鐘數據作爲dataframe 3年。前兩列是索引。如何按月平均值劃分數據框的單個值?

2014-01-01 00:15:00 1269.6  
2014-01-01 00:30:00 1161.6  
2014-01-01 00:45:00 1466.4  
2014-01-01 01:00:00 1365.6  
2014-01-01 01:15:00 1362.6  
2014-01-01 01:30:00 1064.0  
2014-01-01 01:45:00 1171.2  
2014-01-01 02:00:00 1171.0  
2014-01-01 02:15:00 1330.4  
2014-01-01 02:30:00 1309.6  
2014-01-01 02:45:00 1308.4  
2014-01-01 03:00:00 1494.0  

我已經使用resample獲得第二個月度平均系列。

data_Monthly = data.resample('1M', how='mean') 

如何將最後一列的值除以其月平均值,結果仍然是15分鐘間隔的時間序列?

回答

21

首先做一個斑:

import pandas as pd 

In [1]: grouper = pd.TimeGrouper("1M") 

然後,讓你的新列:

In [2]: df['normed'] = df.groupby(grouper).transform(lambda x: x/x.mean()) 

通過傳遞石斑魚到groupby方法,你將數據分組到1個月塊。在每個塊內,用15個分鐘的間隔數據除以該月的平均值。

3

我認爲一般建議使用石斑而不是TimeGrouper。看看this。 例如,如果你的列被稱爲日期,使用

grouper = pd.Grouper(key='Date', freq='M') 

而是採用TimeGrouper然後繼續爲@ Zelazny7建議。 如果列不是日期時間指數,然後使用

df['Date'] = pd.to_datetime(df['Date']) 
0

這可以在一個行完成與:

df.groupby([df.index.year, df.index.month]).transform(lambda x: x/x.mean())