[英]python pandas apply function in groupby, and add results as column in data frame
IM 使用示例数据练习以学习 pandas。 我有如下示例数据:
象征 | 约会时间 | 关 | 体积 |
---|---|---|---|
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 |
苹果 | 2021-04-13 13:00:00 | 135.6 | 10000 |
苹果 | 2021-04-13 13:01:00 | 137.5 | 10000 |
苹果 | 2021-04-13 13:02:00 | 136.25 | 10000 |
苹果 | 2021-04-13 13:03:00 | 138.5 | 10000 |
我在交易品种和收盘价上使用了 groupby function 来使用 panda.rolling.mean 函数添加一些简单的移动平均线。
现在我想让我们 talib 计算每个符号的 RSI。 我想我可以使用应用程序并调用 function。 当我打印 np 数组时,我看到了 output,但是,我没有看到添加的列。
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 数组 output 如下,前 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
它与索引有关。
在将其传回之前设置系列索引有效:
quote_data['rsi'] = quote_data.groupby("sym")["close"].apply(calc_rsi)
def calc_rsi(series):
rsi_arr=np.array(series)
RSI = talib.RSI(rsi_arr, timeperiod=14)
rsi_series=pd.Series(RSI,series.index)
#print(rsi_series.size)
return(rsi_series)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.