【发布时间】:2021-04-17 16:26:42
【问题描述】:
IM 练习使用示例数据来学习熊猫。我有如下示例数据:
| symbol | date_time | close | volume |
|---|---|---|---|
| XOM | 2021-04-13 13:00:00 | 56.5 | 10000 |
| XOM | 2021-04-13 13:01:00 | 57.5 | 10000 |
| XOM | 2021-04-13 13:02:00 | 56.25 | 10000 |
| XOM | 2021-04-13 13:03:00 | 58.5 | 10000 |
| AAPL | 2021-04-13 13:00:00 | 135.6 | 10000 |
| AAPL | 2021-04-13 13:01:00 | 137.5 | 10000 |
| AAPL | 2021-04-13 13:02:00 | 136.25 | 10000 |
| AAPL | 2021-04-13 13:03:00 | 138.5 | 10000 |
我在交易品种和收盘价上使用了 groupby 函数,使用 panda.rolling.mean 函数添加了一些简单的移动平均线。
现在我想让我们 talib 计算每个交易品种的 RSI。我以为我可以使用应用并调用函数。当我打印 np 数组时,我看到了输出,但是,我没有看到添加的列。
quote_data.groupby("sym")["close"].apply(calc_rsi).reset_index(name='rsi_test')
def calc_rsi(series):
rsi_arr=np.array(series)
RSI = talib.RSI(rsi_arr, timeperiod=14)
#print(RSI) --> produces valid output
return(RSI)
示例 Numpy 数组输出如下,前 14 个值是预期的 nan。
nan nan nan nan nan nan
nan nan 17.10526316 30.8277027 38.64107884 36.42559842
35.98126419 49.82352931 51.12420941 56.4889558 53.50561034 57.38372096
63.24414699 65.34066328 65.70388628 60.26289822 61.54881365 61.54881365
【问题讨论】:
-
您的“Sample Numpy 数组输出”指的是什么?是
calc_rsi的结果吗? -
是的,如果不清楚,抱歉。如果我在 calc_rsi 函数中执行 print(type(RSI)),它会返回
<class 'numpy.ndarray'> -
我认为您只是在进行计算,但实际上并未将结果添加到数据框中。也许试试:quote_data['RSI'] = quote_data.groupby("sym")["close"].apply(calc_rsi)
-
@JonathanLeon 我试过了,我看到添加了 RSI 列,但值都是 NaN
-
问题可能与索引有关。计数匹配,原始数据帧有 1130 个条目,从 0 到 1129。因为我进行了分组,RSI 数组的长度为 564 和 566,所以总计数匹配,但索引可能关闭?