22

我有以下 15 分钟的数据作为dataframe3 年。前两列是索引。

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 分钟粒度的时间序列?

4

4 回答 4

28

先做一个石斑鱼:

import pandas as pd

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

然后制作你的新专栏:

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

通过将 grouper 传递给groupby方法,您可以将数据分组为一个月的块。在每个块中,您将 15 分钟间隔数据除以该月的平均值。

于 2013-03-08T18:35:03.990 回答
10

我认为通常建议使用 Grouper 而不是 TimeGrouper。看看这个。例如,如果您的列名为 Date,请使用

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

而不是使用 TimeGrouper ,然后按照@Zelazny7 的建议继续。如果您的列不是日期时间索引,则使用

df['Date'] = pd.to_datetime(df['Date'])
于 2017-07-05T17:46:58.923 回答
0

这可以在一行中完成:

df.groupby([df.index.year, df.index.month]).transform(lambda x: x/x.mean())
于 2017-08-30T13:01:42.787 回答
0

data_Monthly = data.resample('M',on='Date').mean()

于 2020-04-12T12:19:17.567 回答