每天缩小时间序列数据集

时间:2019-06-18 08:03:28

标签: python time-series

我每天都从mysql获得时间序列数据,我想将其转换为每周的时间序列数据。我该怎么做?

例如,这是一个产品数据集,其中包含键时间戳和价格,其中包含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, 21), datetime.date(2019, 4, 22), datetime.date(2019, 4, 23), datetime.date(2019, 4, 24), datetime.date(2019, 4, 25), datetime.date(2019, 4, 26), datetime.date(2019, 4, 27), datetime.date(2019, 4, 28)]
, 'Price': ['3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988']}

现在,我不希望简单地具有相应的日期和价格,而是希望每周的平均数据从周六开始,到周五结束(这里我以4/19星期五和4/26星期五为例,代表每周平均值,使用每个日期之前6天的数据;请注意,这些日期不仅代表一天的价格,因此结果应如下所示:

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

2 个答案:

答案 0 :(得分:1)

如果您将时间序列数据转换为pd.to_datetime(),则可以轻松找到从星期五开始的一周的平均值

df = pd.DataFrame({'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, 21), datetime.date(2019, 4, 22), datetime.date(2019, 4, 23), datetime.date(2019, 4, 24), datetime.date(2019, 4, 25), datetime.date(2019, 4, 26), datetime.date(2019, 4, 27), datetime.date(2019, 4, 28)], 'Price': ['3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988']})
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
df['Price'] = df['Price'].astype('int')

然后使用列表推导创建一个新序列,然后对数据进行累加求和

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]})

答案 1 :(得分:0)

通过遵循@saahil的步骤,只要我几乎可以得到我想要的东西。我需要在结果中包含的信息是与星期相对应的时间戳。但是,有我的解决方案,而不是按我选择的分组依据来帮助我解决这个问题。

df2 = pd.pivot_table(df,index=['Week'],values=['Price','Timestamp'],aggfunc={'Price':np.mean,'Timestamp': max})