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 2

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), Если вам не нравится NaNs.

Я думаю, что данные должны быть пересчитаны перед применением скользящей суммы. Я предполагаю, что начальный фрейм данных индексируется датой панды.

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