pct_change的变通办法不能与Pandas中的.rolling()一起使用?

吉姆

我有一个超过2mm行的数据框。它对过去20年中标准普尔500指数所有股票的收盘价进行了调整(因此,公司/股票行情混合)。底部是我的数据帧的快照。我将把这些数据放到一个预测模型中,该模型使用各种动量列作为其特征,并将尝试预测股票是否可能具有6%以上的月收益率。然而,事实证明生产合适的“动量柱”是困难的。

我的目标是“ one_month_6_pct + _gain”列,该列是从“ 21_day_performance”列中派生的。我的动量列无法“查看”该数据。

下面的代码用于产生使用当前行信息的列(我不必在此移位)。

    df['daily_performance'] = df.groupby('Ticker').adj_close.pct_change().fillna(0)
    df['twenty_one_day_performance'] = df.groupby('Ticker').adj_close.pct_change(periods=21).fillna(0)
    df.loc[df['twenty_one_day_performance'] >= 0.06, 'one_month_6_pct+_gain'] = "Yes"
    df.loc[df['twenty_one_day_performance'] < 0.06, 'one_month_6_pct+_gain'] = "No"

但是,当我尝试基于前几天(没有“看到”我之前提到的21天)基于adj_close创建新列时,我遇到了各种问题。

这很接近,但是在这里使用“ sum()”是不正确的。如果股票在第一天的交易价格为20美元,而在第二天就上涨了100%,则其价格为40美元。但是,如果它在第三天下跌100%,将是0美元,而不是20美元。因此,此处的汇总不正确。但这与我所获得的代码差不多。

    df['preceeding_5_day_perf']=df.groupby('Ticker').daily_performance.rolling(26).sum().fillna(0).reset_index(0,drop=True)-df.groupby('Ticker').daily_performance.rolling(21).sum().fillna(0).reset_index(0,drop=True)

我认为如果在rolling()之后支持pct_change(),下面的方法将起作用。但是,我得到“'RollingGroupby'对象没有属性'pct_change'”

    df['preceeding_5_day_perf']=df.groupby('Ticker').adj_close.rolling(26).pct_change().fillna(0).reset_index(0,drop=True)-df.groupby('Ticker').adj_close.rolling(21).pct_change().fillna(0).reset_index(0,drop=True)

下面抛出一个错误。“ TypeError:--'RollingGroupby'和'RollingGroupby'不支持的操作数类型”

    df['preceeding_5_day_perf']=df.groupby('Ticker').adj_close.rolling(26)-df.groupby('Ticker').adj_close.rolling(21)

下方是接近值,但它给出21到26之间的5天的“ twenty_one_day_performance”的取反/相反值。我希望这5天给出0.0。

    df['preceeding_5_day_perf'] = (df.groupby('Ticker').adj_close.pct_change(periods=26).fillna(0)) - (df.groupby('Ticker').adj_close.pct_change(periods=21).fillna(0))

下面也很接近,但是,由于df中有500种不同的股票,所以当一只股票结束而另一只股票开始时,这是一个问题。在您考虑重叠的股票/股票行情问题之前,下面的方法起作用。我不知道如何让groupby在这里工作。

    preceeding_5_day_perf = (df['adj_close'].shift(26) - df['adj_close'].shift(21)) / df['adj_close'].shift(21)
    df = df.assign(preceeding_5_day_perf=preceeding_5_day_perf)

我的数据框的一个小样本:

Index     Date      High        Low         adj_close   Ticker daily_performance 21_day_performance one_month_6_pct+_gain
8930    2020-10-15  35.380001   33.639999   34.250000   UAL -0.038192   -0.105744                               No
8931    2000-01-03  18.625000   17.312500   10.834452   TROW    0.000000    0.000000                             No
8932    2000-01-04  17.562500   17.000000   10.506723   TROW    -0.030249   0.000000                             No
8933    2000-01-05  17.468750   16.593750   10.487448   TROW    -0.001835   0.000000                             No
8934    2000-01-06  17.500000   16.687500   10.795900   TROW    0.029412    0.000000                             No
8935    2000-01-07  17.750000   17.250000   10.718788   TROW    -0.007143   0.000000                             No
8936    2000-01-10  17.875000   17.437500   10.834452   TROW    0.010791    0.000000                             No
8937    2000-01-11  17.781250   17.281250   10.795900   TROW    -0.003558   0.000000                             No
8938    2000-01-12  18.250000   17.593750   11.258587   TROW    0.042858    0.000000                             No
8939    2000-01-13  19.843750   18.296875   11.875495   TROW    0.054794    0.000000                             No
8940    2000-01-14  19.562500   19.187500   12.048991   TROW    0.014610    0.000000                             No
8941    2000-01-18  19.437500   18.593750   11.586312   TROW    -0.038400   0.000000                             No
8942    2000-01-19  19.625000   18.812500   11.759820   TROW    0.014975    0.000000                             No
8943    2000-01-20  19.312500   18.875000   11.759820   TROW    0.000000    0.000000                             No
8944    2000-01-21  20.093750   19.187500   12.318892   TROW    0.047541    0.000000                             No
8945    2000-01-24  20.937500   19.625000   12.183943   TROW    -0.010955   0.000000                             No
8946    2000-01-25  21.250000   19.250000   13.070749   TROW    0.072785    0.000000                             No
8947    2000-01-26  21.312500   19.812500   12.955079   TROW    -0.008850   0.000000                             No
8948    2000-01-27  21.437500   19.593750   12.106827   TROW    -0.065476   0.000000                             No
8949    2000-01-28  19.687500   18.187500   11.258587   TROW    -0.070063   0.000000                             No
8950    2000-01-31  19.437500   17.937500   11.991161   TROW    0.065068    0.000000                             No
8951    2000-02-01  19.656250   18.687500   12.068275   TROW    0.006431    0.000000                             No
8952    2000-02-02  19.875000   19.000000   12.222500   TROW    0.012779    0.128114                             Yes
8953    2000-02-03  20.062500   18.750000   11.856213   TROW    -0.029968   0.128441                             Yes
8954    2000-02-04  19.375000   18.406250   11.451367   TROW    -0.034146   0.091912                             Yes
8955    2000-02-07  19.406250   18.281250   11.316417   TROW    -0.011785   0.048214                             No
8956    2000-02-08  18.625000   18.250000   11.316417   TROW    0.000000    0.055755                             No
8957    2000-02-09  18.750000   17.812500   11.085073   TROW    -0.020443   0.023132                             No
8958    2000-02-10  18.437500   17.750000   11.007962   TROW    -0.006956   0.019643                             No
8959    2000-02-11  18.000000   17.500000   10.824816   TROW    -0.016638   -0.038528                            No
8960    2000-02-14  17.718750   16.593750   10.391053   TROW    -0.040071   -0.125000                            No

吉姆

我最终通过创建新的数据框找到了解决该问题的方法。我确定有更好的解决方案。

    #creating an array of tickers
    unique_tickers = df.Ticker.unique()
    #creating a dictionary to be used in a for loop
    companydict = {elem : pd.DataFrame() for elem in unique_tickers}
    for key in companydict.keys():
        companydict[key] = df[:][df.Ticker == key]
        #creating the 5 day performance column that preceeds the 21 day prediction period
        preceeding_5_day_perf = (companydict[key]['adj_close'].shift(21) - companydict[key]['adj_close'].shift(26)) / companydict[key]['adj_close'].shift(26)
        companydict[key] = companydict[key].assign(preceeding_5_day_perf=preceeding_5_day_perf).fillna(0)
    #creating a new df for each ticker (eg. CSCO ticker will be in df_CSCO)
    globals()['df_{}'.format(key)] = companydict[key]

然后,我刚刚创建了所有df的列表,并使用concat垂直组合了所有数据帧。

    df_final = pd.concat(df_list)

如果在pandas中roll()之后支持pct_change(),那就容易多了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将rolling_apply与在Pandas中需要2个参数的函数一起使用

来自分类Dev

使用泛型中的参数的new()约束的变通办法

来自分类Dev

notifyDataSetChanged()不能与Fragment中的GridView一起使用

来自分类Dev

python与递归一起使用:为什么一个变通办法起作用而另一个变通?

来自分类Dev

透明的ViewController可与presentViewController一起使用,但不能与pushViewController一起使用

来自分类Dev

为什么Quickbooks可以与Ubuntu一起使用,而不能与Fedora一起使用?

来自分类Dev

为什么它可以与$ scope一起使用,但不能与`this`一起使用?

来自分类Dev

QSignalSpy不能与线程一起使用

来自分类Dev

LibreOffice为什么不能与HUD一起使用?

来自分类Dev

redirect_to不能与ajax一起使用

来自分类Dev

maxlength不能与Karma一起使用

来自分类Dev

CharacterEncodingFilter不能与Spring Security 3.2.0一起使用

来自分类Dev

readValue()不能与TypeReference一起使用

来自分类Dev

为什么模拟不能与AsyncTask一起使用?

来自分类Dev

谷歌云打印不能与phonegap一起使用

来自分类Dev

QtQuick TableView不能与C ++-QAbstractTableModel一起使用

来自分类Dev

“ bundle exec spring”不能与rbenv一起使用?

来自分类Dev

sql <>不能与日期时间一起使用

来自分类Dev

IE显然不能与Ajax一起使用

来自分类Dev

Lucene:前缀查询不能与WhitespaceAnalyzer一起使用

来自分类Dev

角图不能与requirejs一起使用

来自分类Dev

If / ElseIf块不能与-or一起使用

来自分类Dev

NestedScrollView不能与Recyclerview一起使用

来自分类Dev

TreeWalker检查不能与Kotlin / Gradle一起使用?

来自分类Dev

Google字体不能与CSS一起使用吗?

来自分类Dev

jQuery .load()函数不能与DataTables一起使用?

来自分类Dev

必需属性不能与<form>标签一起使用

来自分类Dev

setDefaultsOnInsert不能与upsert一起使用

来自分类Dev

QML图形效果不能与PyInstaller一起使用

Related 相关文章

  1. 1

    将rolling_apply与在Pandas中需要2个参数的函数一起使用

  2. 2

    使用泛型中的参数的new()约束的变通办法

  3. 3

    notifyDataSetChanged()不能与Fragment中的GridView一起使用

  4. 4

    python与递归一起使用:为什么一个变通办法起作用而另一个变通?

  5. 5

    透明的ViewController可与presentViewController一起使用,但不能与pushViewController一起使用

  6. 6

    为什么Quickbooks可以与Ubuntu一起使用,而不能与Fedora一起使用?

  7. 7

    为什么它可以与$ scope一起使用,但不能与`this`一起使用?

  8. 8

    QSignalSpy不能与线程一起使用

  9. 9

    LibreOffice为什么不能与HUD一起使用?

  10. 10

    redirect_to不能与ajax一起使用

  11. 11

    maxlength不能与Karma一起使用

  12. 12

    CharacterEncodingFilter不能与Spring Security 3.2.0一起使用

  13. 13

    readValue()不能与TypeReference一起使用

  14. 14

    为什么模拟不能与AsyncTask一起使用?

  15. 15

    谷歌云打印不能与phonegap一起使用

  16. 16

    QtQuick TableView不能与C ++-QAbstractTableModel一起使用

  17. 17

    “ bundle exec spring”不能与rbenv一起使用?

  18. 18

    sql <>不能与日期时间一起使用

  19. 19

    IE显然不能与Ajax一起使用

  20. 20

    Lucene:前缀查询不能与WhitespaceAnalyzer一起使用

  21. 21

    角图不能与requirejs一起使用

  22. 22

    If / ElseIf块不能与-or一起使用

  23. 23

    NestedScrollView不能与Recyclerview一起使用

  24. 24

    TreeWalker检查不能与Kotlin / Gradle一起使用?

  25. 25

    Google字体不能与CSS一起使用吗?

  26. 26

    jQuery .load()函数不能与DataTables一起使用?

  27. 27

    必需属性不能与<form>标签一起使用

  28. 28

    setDefaultsOnInsert不能与upsert一起使用

  29. 29

    QML图形效果不能与PyInstaller一起使用

热门标签

归档