簡體   English   中英

Python:滾動重采樣

[英]Python: resample on a rolling basis

我有一個 DataFrame 如下:

data = [[99330,12,122],
   [1123,1230,1287],
   [123,101,812739],
   [1143,12301230,252],
   [234,342,4546],
   [2445,3453,3457],
   [7897,8657,5675],
   [46,5675,453],
   [76,484,3735],
   [363,93,4568],
   [385,568,367],
   [458,846,4847],
   [574,45747,658468],
   [57457,46534,4675]]
df1 = pd.DataFrame(data, index=['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04',
                           '2022-01-05', '2022-01-06', '2022-01-07', '2022-01-08',
                           '2022-01-09', '2022-01-10', '2022-01-11', '2022-01-12',
                           '2022-01-13', '2022-01-14'], 
              columns=['col_A', 'col_B', 'col_C'])
df1.index = pd.to_datetime(df1.index)
df1.resample('1D').last().rolling(7).last()

最后一行給了我以下錯誤: AttributeError: 'Rolling' object has no attribute 'last'

我想要做的是滾動重新采樣數據(7、30、90 天)。

有沒有辦法在不使用很多循環的情況下做到這一點?

last申請,好像rolling給了你 dataframe; 它沒有(因為它實際上是“不完整的”,如下所示)。

一般提示是,您可以獲取從上一步中獲得的任何內容,並使用help 在這種情況下

x = df1.resample('1D').last().rolling(7)
help(x)

它為您提供了一個非常廣泛的手冊。

您的問題缺少的是您實際上並沒有精確地指定滾動的內容。 你想要一個滾動的意思嗎? 這會提示您要對滾動數據使用.mean()

更具體地說,在這種情況下,使用 timedelta 可能最有幫助,這將使代碼更加清晰,並幫助您處理極端情況,而不是使用 integer 計數

rolled_df = df1.rolling(datetime.timedelta(days=7)).mean()

暫無
暫無

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

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