示例是我有一个pandas数据框,代表我在2016年进行练习的所有日子。日期表示为DateTime64 [ns]。
我想要生成的是从2016年1月1日到2016年12月30日的时间序列,其中任意一天(例如30Mar2016)的值等于我执行练习的前六天中的天数[24Mar到30Mar]每天一行行使将出现在原始数据框中。
我无法找出一个好的pythonic / vectorized方法来定义新的数据帧来进行此计数。它的索引是1Jan2016到31Dec2016,但我看不出如何很好地定义'count'列。我真的想避免一些讨厌的循环/迭代结构。
答案 0 :(得分:0)
您需要reindex
您的数据框到一年中的所有日期,这样您就可以获得您没有执行此练习的所有日期。然后使用rolling_sum
。
month = [np.random.randint(1,12) for _ in range(0,100)]
day = [np.random.randint(1,28) for _ in range(0,100)]
date = [datetime(2016, x, y) for x,y in zip(month, day)]
date = sorted(set(date))
values = [1]*len(date)
df = pd.DataFrame({'exercise': values}, index=date) # generate random data
all_dates = pd.date_range("1/1/2016", "12/31/2016")
df = df.reindex(all_dates) # reindex to get missing days
result = pd.rolling_sum(df, window=6, min_periods=1)