Скользящее среднее за последние 3 года для номера той же недели Python Pandas

Я нахожу среднее значение эквивалентных недель, когда есть данные, например, 201932, используя среднее значение данных за 201632, 201732 и 201832. Пример: 2019 - это год, а 32 - номер недели.

Например, при поиске для Франции - год 201901 следует взять среднее значение выручки 201801,201701,201601 только для Франции (при наличии данных) и заполнить результат в другом новом столбце для каждой строки, представленной во фрейме данных.

примерный набор данных

Обратите внимание, что для каждой страны существует несколько стран, и данные варьируются от 2016 до 2019 в неделю, как указано в данных выборки.

Пожалуйста, помогите в коде Python Pandas для этой проблемы. Спасибо заранее

2 ответа

import pandas as pd
import datetime as datetime

df['Calender Week'] = pd.to_datetime(df['Calender Week'] + '-0', format = '%Y%W-%w')
df.groupby([df['C'], df['Calender Week'].dt.week])['Revenue'].mean()

Это делает то, что вы хотите. Сначала вы должны изменить столбец "Неделя календаря" на datetime. В конвертации мне пришлось добавить '-0', чтобы конвертировать правильно. Все, что он делает - это решает, начинается ли неделя в воскресенье или понедельник, что в нашем случае не имеет значения.

Во второй строке мы используем groupby. Мы группируем по стране и фактической календарной неделе (от 1 до 52), как представлено .dt.week, Мы смотрим на столбец Доход и, наконец, берем среднее значение.

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

  C      Calender Week
France        50      16.50
              51      25.00
              52      30.00
USA           50      14.00
              51      13.25
              52      30.50

Обобщенный пример, не протестированный полностью, вы можете обновить в соответствии с вашими потребностями, пожалуйста, простите за синтаксические ошибки / ошибки компиляции

# 1 load your data here
myYearlyWeekAvgList = [[Calendar, WkNumber, France, 0, 201538], [....]]

# 2 initialize variables here
totalSum = 0
movingAves = 0  # track total for that yr
myYear = currentYear #  input, for e.g. 2018

# 3 start totals & averages here
for i, x in enumerate(myYearlyWeekAvgList, 1):
    T = x[i]            # get each row
    if x == currentYear # for e.g. if yr is 2018, then sum value
        totalSum.append(T[3]) # your revenue in 3rd col I guess

        moving_ave = totalSum/i  # your average for that col
Другие вопросы по тегам