多参数Lambda

2024-09-30 01:23:36 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是包含多个股票代码的股票信息的数据框摘录:

      ticker       date    open    high     low   close      volume        rsi
0        A2M 2015-03-31   0.555   0.595   0.530   0.565   4816294.0        NaN
1        A2M 2015-04-30   0.475   0.500   0.475   0.500    531816.0        NaN
2        A2M 2015-05-29   0.475   0.475   0.455   0.465   5665854.0        NaN
3        A2M 2015-06-30   0.640   0.650   0.630   0.640   1691918.0  63.636364
4        A2M 2015-07-31   0.750   0.760   0.730   0.735    714927.0  76.047904
64672    ZFX 2008-01-31  10.090  10.490   9.860  10.280   4484500.0        NaN
64673    ZFX 2008-02-29  10.650  11.130  10.650  11.130  15525073.0        NaN
64674    ZFX 2008-03-31  10.010  10.080   9.920   9.980   4256951.0        NaN
64675    ZFX 2008-04-30   9.900  10.190   9.850  10.100   3522569.0  21.238157
64676    ZFX 2008-05-30   9.750   9.750   9.450   9.500   8270995.0  16.253845

我需要从ta-lib包中添加指标,指标按ticker分组。我使用以下代码成功实现了RSI:

monthly_raw_data['rsi'] = monthly_raw_data.groupby('ticker')['close'].apply(lambda x: ta.RSI(x, timeperiod=3))

然而,当尝试实现CCI时,它有多个参数,我不知道如何通过lambda表达式实现。我尝试了以下方法:

monthly_raw_data['cci'] = monthly_raw_data.groupby('ticker')['close'].apply(lambda x: ta.CCI(monthly_raw_data['high'], monthly_raw_data['low'], x, timeperiod=12))

我收到以下错误消息:

 Exception: input array lengths are different 

我还尝试将其分离为不同的功能:

def cci(df):
    cci = ta.CCI(monthly_raw_data['high'], monthly_raw_data['low'], monthly_raw_data['close'], timeperiod=6)
    return cci

monthly_raw_data['cci'] = monthly_raw_data.groupby('ticker').apply(lambda df: cci(df))

但是,我收到以下错误消息:

 TypeError: incompatible index of inserted column with frame index 

当我创建一个单独的dataframe来查看发生了什么时,它似乎将dataframe更改为以下内容:

    0   1   2   3   4   5   6   7   8   9   ... 64667   64668   64669   64670   64671   64672   64673   64674   64675   64676
ticker                                                                                  
A2M NaN NaN NaN NaN NaN 41.584158   28.0    82.316119   199.492386  172.390572  ... -39.470637  -0.791007   -90.955414  -147.191601 -130.347794 -124.040219 -72.940833  -79.655329  -62.732749  -83.135392
AAN NaN NaN NaN NaN NaN 41.584158   28.0    82.316119   199.492386  172.390572  ... -39.470637  -0.791007   -90.955414  -147.191601 -130.347794 -124.040219 -72.940833  -79.655329  -62.732749  -83.135392
AAP NaN NaN NaN NaN NaN 41.584158   28.0    82.316119   199.492386  172.390572  ... -39.470637  -0.791007   -90.955414  -147.191601 -130.347794 -124.040219 -72.940833  -79.655329  -62.732749  -83.135392
ABB NaN NaN NaN NaN NaN 41.584158   28.0    82.316119   199.492386  172.390572  ... -39.470637  -0.791007   -90.955414  -147.191601 -130.347794 -124.040219 -72.940833  -79.655329  -62.732749  -83.135392
ABC NaN NaN NaN NaN NaN 41.584158   28.0    82.316119   199.492386  172.390572  ... -39.470637  -0.791007   -90.955414  -147.191601 -130.347794 -124.040219 -72.940833  -79.655329  -62.732749  -83.1353

任何帮助都将不胜感激


Tags: lambdaclosedatarawnanlowtickerapply

热门问题