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