我需要幫助將前 X 天的平均值放入新列的當前位置。
我遇到的問題是在代碼行上df['avg'] = (df['Close'].shift(0) df['Close'].shift(1)) / 2。
這就是我想要的,但當然,我希望它是動態的。這就是我需要幫助的地方!我不知道該怎么做,因為我在呼叫時回圈自身時遇到了問題。
我明白它在做什么以及為什么(......我認為)但無法找到解決它的方法來獲得我想要的結果。
import pandas as pd
import os
import sys
import NasdaqTickerSymbols as nts
class MY_PANDA_INDICATORS():
def __init__(self, days, csvFile):
self.days = days
self.df = None
self.csvFile = csvFile
def GetDataFrame(self):
modpath = os.path.dirname(os.path.abspath(sys.argv[0]))
datapath = os.path.join(modpath, "CSV\\" self.csvFile ".csv")
df = pd.read_csv(datapath)
return(df)
def GetEMA(self):
df['avg'] = df['Close'].shift(0) df['Close'].shift(1)
return(df)
myD = MY_PANDA_INDICATORS(2,nts.matches[0])
print(myD.GetEMA())
這是我得到的也是我想要的,但我希望能夠改變天數并獲得我傳遞給它的“x”數量的平均值。我試過回圈,但沒有按預期作業。
Date Open High Low Close Adj Close Volume avg
0 2020-11-16 1.15 1.15 1.11 1.12 1.12 17100 NaN
1 2020-11-17 1.15 1.15 1.11 1.13 1.13 29900 1.125
2 2020-11-18 1.15 1.20 1.12 1.16 1.16 127700 1.145
3 2020-11-19 1.17 1.22 1.16 1.16 1.16 64500 1.160
4 2020-11-20 1.18 1.18 1.14 1.15 1.15 32600 1.155
.. ... ... ... ... ... ... ... ...
246 2021-11-08 2.40 2.40 2.31 2.32 2.32 20000 2.340
247 2021-11-09 2.35 2.35 2.28 2.31 2.31 19700 2.315
248 2021-11-10 2.29 2.31 2.20 2.20 2.20 24200 2.255
249 2021-11-11 2.20 2.22 2.18 2.21 2.21 18700 2.205
250 2021-11-12 2.21 2.22 2.18 2.21 2.21 7800 2.210
uj5u.com熱心網友回復:
您可以按日期重新索引您的 DataFrame,然后執行滾動平均值并使用引數 x 天數作為字串(例如"2D"):
df['avg'] = df.set_index(["Date"]).rolling(f"{self.days}D").mean().values
在一個較小的例子中:
df = pd.DataFrame({'date': pd.date_range('2021-01-01','2021-01-05'), 'close':[1,3,5,7,9]})
輸入:
>>> df
date close
0 2021-01-01 1
1 2021-01-02 3
2 2021-01-03 5
3 2021-01-04 7
4 2021-01-05 9
df['avg'] = df.set_index(["date"]).rolling("2D").mean().values
輸出:
>>> df
date close avg
0 2021-01-01 1 1.0
1 2021-01-02 3 2.0
2 2021-01-03 5 4.0
3 2021-01-04 7 6.0
4 2021-01-05 9 8.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/362514.html
