簡體   English   中英

以相反的日期順序在 pandas dataframe 中滾動 window?

[英]rolling window in pandas dataframe in reverse date order?

我有一個 dataframe,我應用了rolling() window。 然而,日期從最新到最舊排序,因此缺失的部分(window 寬度)位於頂部。

為了避免這種情況,我reverse sort by dates ,然后應用rolling()方法。 但是,這似乎效率低下,所以想知道是否有辦法從底部向上滾動?

示例 dataframe:

    Symbol       Date     Open     High      Low    Close
0  UKX:IND 2022-09-01  7284.15  7284.15  7131.69  7148.50
1  UKX:IND 2022-08-31  7361.63  7378.44  7263.62  7284.15
2  UKX:IND 2022-08-30  7427.31  7486.40  7351.12  7361.63
3  UKX:IND 2022-08-26  7479.74  7530.65  7422.02  7427.31
4  UKX:IND 2022-08-25  7471.51  7535.70  7469.17  7479.74
5  UKX:IND 2022-08-24  7488.11  7488.12  7410.40  7471.51
6  UKX:IND 2022-08-23  7533.79  7533.79  7467.56  7488.11
7  UKX:IND 2022-08-22  7550.37  7550.41  7491.26  7533.79
8  UKX:IND 2022-08-19  7541.85  7578.85  7513.26  7550.37
9  UKX:IND 2022-08-18  7515.75  7541.89  7493.66  7541.85

這是代碼的相關部分:

df = df.sort_values(by='Date')   # <--  do a reverse sort
df['ma'] = df['Close'].rolling(window=5).mean()
df = df.sort_values(by='Date', ascending=False)   # <-- sort back again

我試過什么?

到目前為止,我唯一的解決方案是按日期反轉 dataframe(然后將其反轉回來)。

不需要兩次排序,使用索引臨時反轉,應該會更快:

df = df.sort_values(by='Date', ascending=False)
df['ma'] = df['Close'][::-1].rolling(window=5).mean()[::-1]
print(df)

甚至:

df['ma'] = df['Close'][::-1].rolling(window=5).mean()

因為 pandas 在分配之前對齊索引

output:

    Symbol        Date     Open     High      Low    Close        ma
0  UKX:IND  2022-09-01  7284.15  7284.15  7131.69  7148.50  7340.266
1  UKX:IND  2022-08-31  7361.63  7378.44  7263.62  7284.15  7404.868
2  UKX:IND  2022-08-30  7427.31  7486.40  7351.12  7361.63  7445.660
3  UKX:IND  2022-08-26  7479.74  7530.65  7422.02  7427.31  7480.092
4  UKX:IND  2022-08-25  7471.51  7535.70  7469.17  7479.74  7504.704
5  UKX:IND  2022-08-24  7488.11  7488.12  7410.40  7471.51  7517.126
6  UKX:IND  2022-08-23  7533.79  7533.79  7467.56  7488.11       NaN
7  UKX:IND  2022-08-22  7550.37  7550.41  7491.26  7533.79       NaN
8  UKX:IND  2022-08-19  7541.85  7578.85  7513.26  7550.37       NaN
9  UKX:IND  2022-08-18  7515.75  7541.89  7493.66  7541.85       NaN

暫無
暫無

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

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