簡體   English   中英

每天縮小時間序列數據集

[英]Shrink time-series datasets from day to week

我從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']}

如果將時間序列數據轉換為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()

希望這可以幫助 :)

UPDATE

您可以使用min和max在Timestamp變量上執行聚合函數,並獲得日期。

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

通過遵循@saahil提供的步驟,我幾乎可以得到我想要的東西。 我需要在結果中包含的信息是與星期相對應的時間戳。但是,有解決方案,而不是按我選擇的分組方式來幫助我。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM