2013-03-08 69 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())