我有以下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分钟粒度的时间序列?
答案 0 :(得分: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
方法,您可以将数据分组为一个月的块。在每个块中,您将15分钟间隔数据除以该月的平均值。
答案 1 :(得分:6)
我认为通常建议使用Grouper而不是TimeGrouper。看看this。 例如,如果您的列名为Date,请使用
grouper = pd.Grouper(key='Date', freq='M')
而不是使用TimeGrouper,然后继续@ Zelazny7建议。 如果您的列不是日期时间索引,请使用
df['Date'] = pd.to_datetime(df['Date'])
答案 2 :(得分:0)
这可以在一行中完成:
df.groupby([df.index.year, df.index.month]).transform(lambda x: x/x.mean())
答案 3 :(得分:0)
data_Monthly = data.resample('M',on='Date').mean()