with valid timedeltaindex resample rangeindex periodindex only non monthly last got datetimeindex but pandas time-series average resampling

pandas - valid - ¿Cómo puedo dividir los valores individuales de un marco de datos por promedios mensuales?



resample pandas (3)

Creo que generalmente se recomienda usar Grouper en lugar de TimeGrouper. Echa un vistazo a this . Por ejemplo, si su columna se llama Fecha, use

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

en lugar de usar TimeGrouper y luego continúe como sugirió @ Zelazny7. Si su columna no es un índice de fecha y hora, use

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

Tengo los siguientes datos de 15 minutos como un dataframe de dataframe de 3 años. Con las dos primeras columnas siendo el índice.

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

He usado resample para obtener una segunda serie con promedios mensuales.

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

¿Cómo puedo dividir los valores en la última columna por su promedio mensual y el resultado sigue siendo una serie de tiempo con una granularidad de 15 minutos?


Esto se puede hacer en una línea con:

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


Primero haz un mero:

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

Entonces haz tu nueva columna:

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

Al pasar el mero al método grupal, agrupa sus datos en groupby un mes. Dentro de cada fragmento, se divide la referencia de intervalo de 15 minutos por la media de ese mes.