簡體   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