Как сделать выборку из месяца в год и обратно в месяц, где месячные значения = годовые? - PullRequest
0 голосов
/ 29 июня 2018

У меня есть месячные временные ряды, которые я конвертировал в среднегодовые значения, используя

ts_ann =ts_mo['Value'].resample('A').mean()

Далее я хотел бы создать новый временной ряд, в котором месячные значения равны годовым. Таким образом, я могу отображать месячные и выделять среднегодовые значения, но также с месячной периодичностью. Не повезло в поисках решения. Спасибо

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы можете использовать группирование и преобразование для получения среднегодовых значений. Присвойте это новому столбцу, и вы готовы построить график.

ts_mo['Year_mean'] = ts_mo.groupby(ts_mo.index.year)['Value'].transform('mean')

Полный пример:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(400)

ts_mo = pd.DataFrame({
    'date': pd.date_range(start='2016',end='2018', freq='M'),
    'Value': np.random.randint(0,100, size=24)
}).set_index('date')

ts_mo['Year_mean'] = ts_mo.groupby(ts_mo.index.year)['Value'].transform('mean')

ts_mo.plot(x=ts_mo.index, y=['Value','Year_mean'])
plt.show()

Возвращает:

enter image description here

0 голосов
/ 29 июня 2018

Вы можете выполнить левое внешнее объединение обоих DataFrames в их индексе. Это приведет к созданию DataFrame с NaN с января по ноябрь в столбце годовых значений и фактическим среднегодовым значением в декабре. После этого вы заполняете значения NaN в обратном порядке, используя метод pandas fillna:

ts_mo.merge(ts_ann, left_index=True, right_index=True, how='left').fillna(method='bfill')

Указав suffixes=('_monthly', '_yearly_average') внутри вызова merge, вы можете дать результирующим столбцам осмысленные имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...