Python 将时间序列数据集从一天缩减到一周

Python 将时间序列数据集从一天缩减到一周,python,time-series,Python,Time Series,我从mysql中获得了一个逐日的时间序列数据,我想把它转换成每周的时间序列数据。我怎么能做到 例如,这里有一个产品的数据集,它有键Timestamp&Price,包含14天的日期和相应的价格 Product:{'Timestamp':[datetime.date(2019,4,15),datetime.date(2019,4,16),datetime.date(2019,4,17),datetime.date(2019,4,18),datetime.date(2019,4,19),datetim

我从mysql中获得了一个逐日的时间序列数据,我想把它转换成每周的时间序列数据。我怎么能做到

例如,这里有一个产品的数据集,它有键Timestamp&Price,包含14天的日期和相应的价格

Product:{'Timestamp':[datetime.date(2019,4,15),datetime.date(2019,4,16),datetime.date(2019,4,17),datetime.date(2019,4,18),datetime.date(2019,4,19),datetime.date(2019,4,20),datetime.date(2019,4,22),datetime.datetime(2019,4,23),datetime.datetime(2019,4,24),datetime.date,4,25),datetime.date(2019,4,26),datetime.date(2019,4,27),datetime.date(2019,4,28)]
,价格:['3988','3988','3988','3988','3988','3988','3988','3988','3988','3988','3988','3988','3988','3988']
现在,我想让我的周平均数据从周六开始到周五结束,而不是简单地给出相应的日期和价格(这里我使用19年4月4日星期五和26年4月4日星期五的例子来表示每周平均值,使用每个日期前6天的数据;注意,这些日期不仅仅代表一天的价格)因此结果应该是这样的:

Product:{'Timestamp':[datetime.date(2019,4,19),datetime.date(2019,4,26)]
,价格:['3988','3988']}

如果您将时间序列数据转换为pd.to_datetime(),则很容易找到从周五开始的一周平均值

然后使用列表理解创建一个新的序列,然后对数据进行累积和

df['Week'] = [1 if x == 4 else 0 for x in df['Timestamp'].dt.weekday]
df['Week'] = df['Week'].cumsum()
最后,对新创建的序列进行分组以获得结果

df[['Price', 'Week']].groupby('Week').mean()
希望这有帮助:)

更新

您只需使用min和max对Timestamp变量执行聚合函数,就可以得到日期

df[['Timestamp', 'Week']].groupby(['Week']).agg({'Timestamp':[np.min,np.max]})

通过遵循@saahil提供的步骤,我几乎可以得到我想要的。我需要在我的结果中包含一个信息,那就是对应于一周的时间戳。但是,我的解决方案,而不是我选择的分组透视来帮助我解决这个问题

df2=pd.pivot_表(df,索引=['Week'],值=['Price','Timestamp'],aggfunc={'Price':np.mean,'Timestamp':max})

您好,您的答案非常有用!它完全解决了我的问题。非常感谢。祝您今天过得愉快!哦,我仍然有一个问题,我从这个结果得到的指数是星期,但我希望我的指数是我选择结束的日期。所以索引应该是datetime.date(2019,4,19),datetime.date(2019,4,26)。有什么想法吗?嗨,我加了密码。如果它解决了你的问题,请告诉我。再见谢谢,还有几个步骤需要解决。但它给了我一些打击。
df[['Timestamp', 'Week']].groupby(['Week']).agg({'Timestamp':[np.min,np.max]})