我拥有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
答案 0 :(得分: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
。
答案 1 :(得分:0)
我认为在应用滚动总和之前需要重新采样数据。我假设起始数据框由pandas日期索引。
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