繁体   English   中英

如何从 function 返回到 dataframe 中的 append 元组?

[英]How to append tuples returned from function to dataframe in python?

我有一个 dataframe ,我使用“关闭”来计算 stoch rsi。 StochRSI() function 返回一个tuple ,我无法弄清楚如何正确地将 append 返回的结果返回到原始dataframe

daily = binance_klines()
daily['open'] = daily['open'].astype(float)
daily['high'] = daily['high'].astype(float)
daily['low'] = daily['low'].astype(float)
daily['close'] = daily['close'].astype(float)
daily['volume'] = daily['volume'].astype(float)


def StochRSI(series, period=14, smoothK=3, smoothD=3):
    # Calculate RSI 
    delta = series.diff().dropna()
    ups = delta * 0
    downs = ups.copy()
    ups[delta > 0] = delta[delta > 0]
    downs[delta < 0] = -delta[delta < 0]
    ups[ups.index[period-1]] = np.mean( ups[:period] ) #first value is sum of avg gains
    ups = ups.drop(ups.index[:(period-1)])
    downs[downs.index[period-1]] = np.mean( downs[:period] ) #first value is sum of avg losses
    downs = downs.drop(downs.index[:(period-1)])
    rs = ups.ewm(com=period-1,min_periods=0,adjust=False,ignore_na=False).mean() / \
         downs.ewm(com=period-1,min_periods=0,adjust=False,ignore_na=False).mean() 
    rsi = 100 - 100 / (1 + rs)

    # Calculate StochRSI 
    stochrsi  = (rsi - rsi.rolling(period).min()) / (rsi.rolling(period).max() - rsi.rolling(period).min())
    stochrsi_K = stochrsi.rolling(smoothK).mean()
    stochrsi_D = stochrsi_K.rolling(smoothD).mean()

    return stochrsi, stochrsi_K, stochrsi_D

calcs = StochRSI(daily.close, period=14, smoothK=3, smoothD=3)

包含一个示例说明daily DataFrame 的样子会很有帮助,但我假设它是一个 DataFrame,列有['open', 'high', 'low', 'close', 'volume', 'adj close']

如果您想要daily DataFrame 的新列,您可以直接在 function 中创建它们,然后返回修改后的 df:

def StochRSI(series, period=14, smoothK=3, smoothD=3):
    # Calculate RSI 
    delta = series.diff().dropna()
    ups = delta * 0
    downs = ups.copy()
    ups[delta > 0] = delta[delta > 0]
    downs[delta < 0] = -delta[delta < 0]
    ups[ups.index[period-1]] = np.mean( ups[:period] ) #first value is sum of avg gains
    ups = ups.drop(ups.index[:(period-1)])
    downs[downs.index[period-1]] = np.mean( downs[:period] ) #first value is sum of avg losses
    downs = downs.drop(downs.index[:(period-1)])
    rs = ups.ewm(com=period-1,min_periods=0,adjust=False,ignore_na=False).mean() / \
         downs.ewm(com=period-1,min_periods=0,adjust=False,ignore_na=False).mean() 
    rsi = 100 - 100 / (1 + rs)

    # Calculate StochRSI 
    stochrsi  = (rsi - rsi.rolling(period).min()) / (rsi.rolling(period).max() - rsi.rolling(period).min())
    stochrsi_K = stochrsi.rolling(smoothK).mean()
    stochrsi_D = stochrsi_K.rolling(smoothD).mean()

    ## create new columns for your daily df
    daily['stockrsi'] = stochrsi
    daily['stochrsi_K'] = stochrsi_K
    daily['stochrsi_D'] = stochrsi_D

    return daily

daily_new = StochRSI(daily.close, period=14, smoothK=3, smoothD=3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM