【问题标题】:python pandas apply function in groupby, and add results as column in data framepython pandas在groupby中应用函数,并将结果添加为数据框中的列
【发布时间】: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,所以总计数匹配,但索引可能关闭?

标签: python pandas dataframe


【解决方案1】:

它与索引有关。

在传回之前设置系列索引有效:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-29
    • 2018-02-23
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 2016-09-21
    • 2019-02-16
    相关资源
    最近更新 更多