如何在循环中将列附加到Dataframe

2024-04-25 17:56:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来的,希望能帮助我解决一个反复出现的问题

我正在使用下面的代码,试图使用下面的循环将“delta”、“gain”、“loss”、“avg gain”、“avg loss”、“RS”和“RSI”添加为新列。当我运行循环时,没有错误消息,我可以运行RSI函数,但是没有列附加到df数据帧。但是,当我逐行运行代码而不是选择整个循环块并以这种方式运行它时,dataframe将填充列。我做错什么了吗?我希望在以循环方式运行此代码时填充列

df = ohlcv.copy()
def RSI(DF,n):
    df = DF.copy()
    df['delta']=df['Adj Close'] - df['Adj Close'].shift(1)
    df['gain']=np.where(df['delta']>=0,df['delta'],0)
    df['loss']=np.where(df['delta']<0,abs(df['delta']),0)
    avg_gain = []
    avg_loss = []
    gain = df['gain'].tolist()
    loss = df['loss'].tolist()
    for i in range(len(df)):
        if i < n:
            avg_gain.append(np.NaN)
            avg_loss.append(np.NaN)
        elif i == n:
            avg_gain.append(df['gain'].rolling(n).mean().tolist()[n])
            avg_loss.append(df['loss'].rolling(n).mean().tolist()[n])
        elif i > n:
            avg_gain.append(((n-1)*avg_gain[i-1] + gain[i])/n)
            avg_loss.append(((n-1)*avg_loss[i-1] + loss[i])/n)
    df['avg_gain']=np.array(avg_gain)
    df['avg_loss']=np.array(avg_loss)
    df['RS'] = df['avg_gain']/df['avg_loss']
    df['RSI'] = 100 - (100/(1+df['RS']))
    return df['RSI']

抱歉,如果这是一个新手问题,但我必须从某个地方开始