Рассчитайте месячную изменчивость по долгосрочным средним значениям панд

У меня есть данные, которые выглядят так в фрейме данных YM, показывающем значения за 2019 год для 8-12 месяцев:

     year    month  adjusted_power
343  2019    08     20754.20750
344  2019    09     20305.95125
345  2019    10     18428.88125
346  2019    11     27864.02500
347  2019    12     25405.17500

И у меня есть среднемесячные значения во фрейме данных под названием YMmonthmean, который выглядит так:

      month  adjusted_power_AVERAGE
7     08    26161.086034
8     09    20707.108319
9     10    25684.728190
10    11    29468.227759
11    12    29509.313319

Я пытаюсь рассчитать изменчивость значения каждого года, используя столбец Adjust_power_AVERAGE, чтобы результат выглядел так:

требуемый вывод

Я пробовал варианты этого ниже с разными ошибками. Обе переменные YM и YMmonthmean являются фреймами данных. Спасибо за помощь.

#NEED VARIABILITY BY MONTH AND YEAR
df_final = (YM.div(YMmonthmean.loc[1], axis=1) - 1)

Самая последняя ошибка: TypeError: неподдерживаемые типы операндов для /: 'str' и 'str'


person user2100039    schedule 02.12.2020    source источник
comment
Я не уверен, что понимаю, что вы хотите сделать? Делить YM['adjusted_power']/YMmonthmean['adjusted_power']в месяц?   -  person TiTo    schedule 02.12.2020
comment
Привет - извините, я отредактировал свой вопрос, теперь он должен быть более ясным. По сути, просто усредняю ​​столбцы connected_power для каждого года (у меня есть годы и месяцы с января 1991 по декабрь 2019, но я просто показываю 2019 год с августа по декабрь в качестве примера) и месяц с соответствующим столбцом adjust_power_AVERAGE для каждого месяца.   -  person user2100039    schedule 02.12.2020
comment
это решило вашу проблему?   -  person TiTo    schedule 02.12.2020


Ответы (1)


Я бы предложил сначала объединить оба фрейма данных

YM = pd.DataFrame({'year': [2019, 2019, 2019, 2019, 2019],
                    'month': ['08', '09', '10', '11', '12'],
                   'adjusted_power':[20754.20750, 20305.95125, 18428.88125, 27864.02500, 25405.17500],
})
YMmonthmean = pd.DataFrame({'month': ['08', '09', '10', '11', '12'],
                   'adjusted_power_AVERAGE':[26161.086034, 20707.108319, 25684.728190, 29468.227759, 29509.313319],
})

YM = YM.merge(YMmonthmean, on = 'month', how='left')
YM['var'] = YM['adjusted_power']/ YM['adjusted_power_AVERAGE'] -1

приводит к

    year    month   adjusted_power  adjusted_power_AVERAGE  var
0   2019    08      20754.20750     26161.086034            -0.206676
1   2019    09      20305.95125     20707.108319            -0.019373
2   2019    10      18428.88125     25684.728190            -0.282497
3   2019    11      27864.02500     29468.227759            -0.054438
4   2019    12.     25405.17500     29509.313319            -0.139079

Если вы не хотите, чтобы там были дополнительные столбцы, вы можете потом их удалить.

person TiTo    schedule 02.12.2020