[英]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
我試過什么?
rolling(window=-5)
到目前為止,我唯一的解決方案是按日期反轉 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.