如何按月平均值划分数据帧的单个值?

Mar*_*s W 17 average time-series resampling pandas

我有以下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    
Run Code Online (Sandbox Code Playgroud)

我曾经习惯于resample获得月平均值的第二个系列.

data_Monthly = data.resample('1M', how='mean')
Run Code Online (Sandbox Code Playgroud)

如何将最后一列中的值除以月平均值,结果仍然是15分钟粒度的时间序列?

Zel*_*ny7 22

首先做一个石斑鱼:

import pandas as pd

In [1]: grouper = pd.TimeGrouper("1M")
Run Code Online (Sandbox Code Playgroud)

然后制作新专栏:

In [2]: df['normed'] = df.groupby(grouper).transform(lambda x: x/x.mean())
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么要投票?几年前得到答复。 (2认同)

小智 8

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

grouper = pd.Grouper(key='Date', freq='M')
Run Code Online (Sandbox Code Playgroud)

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

df['Date'] = pd.to_datetime(df['Date'])
Run Code Online (Sandbox Code Playgroud)