#python #rolling-sum
Вопрос:
Я пытаюсь рассчитать скользящую сумму в Python на основе выходных дней, однако у меня нет всех дат, перечисленных в моем фрейме данных. В приведенном ниже примере общая сумма должна учитывать тот факт, что дата 2021-01-03 отсутствует в структуре данных
import pandas as pd
df = pd.DataFrame({'date':['2021-01-01', '2021-01-02', '2021-01-04', '2021-01-05'],
'value':[1, 1, 1, 1]})
df_correct = pd.DataFrame({'date':['2021-01-01', '2021-01-02', '2021-01-04', '2021-01-05'],
'value':[1, 1, 1, 1],
'2_day_cum_sum':[1, 2, 1, 2]})
print(df_correct)
Я знаю, как рассчитать скользящую сумму, используя функцию скользящей от панд, но я не знаю, как учесть пропущенную дату. Мое текущее видение состоит в том, чтобы создать фрейм данных, содержащий все комбинации даты и других переменных (не в этом базовом примере), а затем объединить активный набор данных с ним, чтобы я мог эффективно использовать функцию прокрутки из pandas. Тем не менее, я чувствую, что существует лучший подход. Есть какие-нибудь мысли?
Комментарии:
1. Возможно, вы могли бы интерполировать значения? Хотя я не уверен, как это повлияет на ваши результаты.
Ответ №1:
Я знаю, что вы упомянули о функции прокатки, но не уверены, знаете ли вы, что можете указать окно даты в функции прокатки.. Давайте попробуем:
# ensure date is in right format
df['date'] = pd.to_datetime(df.date)
# set date as index
df = df.set_index('date')
# rolling sum with 2 days as window
df['2_day_cum_sum'] = df['value'].rolling('2d').sum()
# reset index
df = df.reset_index()
Я могу получить ваш ожидаемый результат, и я думаю, что этого достаточно для вашего использования, если только вы не хотите ввести другое значение, когда дата отсутствует — например, установите значение 5, если дата отсутствует. Если это так, то нам понадобится другое решение