繁体   English   中英

python pandas 在 groupby 中应用 function,并将结果添加为数据框中的列

[英]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.

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