Несколько математических операций над данными временных рядов с использованием groupby

#python #pandas

#python #pandas

Вопрос:

У меня есть dataframe / series, содержащий данные с ежечасной выборкой за пару лет. Я хотел бы суммировать значения за каждый месяц, а затем вычислить среднее значение этих месячных итогов за все годы. Я могу получить многоиндексный фрейм данных / серию итогов, используя:

 df.groupby([df.index.year, df.index.month]).sum()

Date amp; Time  Date amp; Time
2016         3              220.246292
             4              736.204574
             5              683.240291
             6              566.693919
             7              948.116766
             8              761.214823
             9              735.168033
             10             771.210572
             11             542.314915
             12             434.467037
2017         1              728.983901
             2              639.787918
             3              709.944521
             4              704.610437
             5              685.729297
             6              760.175060
             7              856.928659
 

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

Ответ №1:

Я думаю, вам нужно mean за годы — так на первый уровень:

 df.groupby([df.index.year, df.index.month]).sum().mean(level=0)
 

Комментарии:

1. Спасибо. Думаю, мне нужно узнать об использовании level.

Ответ №2:

Вы можете использовать groupby дважды, один раз, чтобы получить месячную сумму, один раз, чтобы получить среднее значение месячной суммы:

 (df.groupby(pd.Grouper(freq='M')).sum()
   .groupby(pd.Grouper(freq='Y')).mean()
)