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.