[英]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.