Как я могу разделить единые значения фрейма данных по среднемесячным значениям?
У меня есть следующие 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-минутной детализацией?
Ответы
Ответ 1
Сначала сделайте группу:
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-минутный интервал времени по среднему значению за этот месяц.
Ответ 2
Я думаю, что обычно рекомендуется использовать Grouper вместо TimeGrouper. Посмотрите .
Например, если ваш столбец называется Date, используйте
grouper = pd.Grouper(key='Date', freq='M')
вместо использования TimeGrouper, а затем продолжить, как предложил @Zelazny7.
Если ваш столбец не является индексом datetime, используйте
df['Date'] = pd.to_datetime(df['Date'])
Ответ 3
Это можно сделать в одной строке:
df.groupby([df.index.year, df.index.month]).transform(lambda x: x/x.mean())