7-дневное окно с пропущенными датами
У меня есть данные с 300 стадионов и внутри стадиона у меня есть количество посетителей на каждую дату, что была игра. Нет такой игры каждый день.
Для каждого стадиона я хочу создать серию, которая дает скользящую 7-дневную сумму посетителей. Я хочу, чтобы продолжительность этой серии была как можно меньше, чтобы серия начиналась за 7 дней до первой игры и заканчивалась в день последней игры.
Вот как выглядят данные для одного конкретного случая стадион:
Game_date
2013-05-20 122
2013-06-27 350
2013-10-08 105
2013-10-10 100
2013-12-22 165
2013-12-24 55
2014-01-05 321
2014-01-06 71
2014-01-07 199
Пример того, как я хочу, чтобы выходные данные выглядели:
Date
...
2014-01-03 0
2014-01-04 0
2014-01-05 321
2014-01-06 392
2014-01-07 591
2 ответа:
Проверьте функциюrolling_sum . Это один лайнер для вашего примера:
In [48]: pd.rolling_sum(df, window=7, freq='D', min_periods=1) Out[48]: Game_date 2013-05-20 122 2013-05-21 122 2013-05-22 122 ... 2014-01-04 NaN 2014-01-05 321 2014-01-06 392 2014-01-07 591
Вы можете добавить
.fillna(0)
, Если вам не нравитсяNaN
s.
Я думаю, что данные должны быть пересчитаны перед применением скользящей суммы. Я предполагаю, что начальный фрейм данных индексируется датой панды.
df = df.resample('D').fillna(0) print df.tail() seats game_date 2014-01-03 0 2014-01-04 0 2014-01-05 321 2014-01-06 71 2014-01-07 199
Таким образом, все недостающие даты заполняются нулями. Теперь мы можем применить скользящую сумму.
print pd.rolling_sum( df, 7 ).tail() seats game_date 2014-01-03 0 2014-01-04 0 2014-01-05 321 2014-01-06 392 2014-01-07 591