![](/img/trans.png)
[英]Assigning variables to multiple 2-tuples returned from a function in Python
[英]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.