Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:如何根据后续行添加具有值的列_Python_Pandas - Fatal编程技术网

Python 熊猫:如何根据后续行添加具有值的列

Python 熊猫:如何根据后续行添加具有值的列,python,pandas,Python,Pandas,我有以下数据框 timestamp close open high low volume datetime candlestick_pattern candlestick_match_count SYMBOL 0 510037200 0.095486 0.088542 0.103299 0.088542 1857052800 1986-03-01 05:00:00 NO_PATTERN 0.0 MSFT 1 512715600

我有以下数据框

timestamp   close   open    high    low volume  datetime    candlestick_pattern candlestick_match_count SYMBOL
0   510037200   0.095486    0.088542    0.103299    0.088542    1857052800  1986-03-01 05:00:00 NO_PATTERN  0.0 MSFT
1   512715600   0.111979    0.095486    0.121962    0.092882    547142400   1986-04-01 05:00:00 NO_PATTERN  0.0 MSFT
2   515304000   0.121528    0.111979    0.123264    0.107639    333446400   1986-05-01 04:00:00 NO_PATTERN  0.0 MSFT
3   517982400   0.106771    0.121528    0.121528    0.102431    293788800   1986-06-01 04:00:00 NO_PATTERN  0.0 MSFT
4   520574400   0.098958    0.106771    0.109375    0.090278    460800000   1986-07-01 04:00:00 NO_PATTERN  0.0 MSFT
5   523252800   0.098958    0.098958    0.106771    0.094618    266256000   1986-08-01 04:00:00 NO_PATTERN  0.0 MSFT
6   525931200   0.098090    0.098958    0.109375    0.091146    285120000   1986-09-01 04:00:00 NO_PATTERN  0.0 MSFT
7   528523200   0.134549    0.098090    0.139757    0.095486    1565712000  1986-10-01 04:00:00 NO_PATTERN  0.0 MSFT
8   531205200   0.172743    0.135417    0.177951    0.135417    1053964800  1986-11-01 05:00:00 NO_PATTERN  0.0 MSFT
9   533797200   0.167535    0.172743    0.173611    0.157118    721526400   1986-12-01 05:00:00 NO_PATTERN  0.0 MSFT
10  536475600   0.253906    0.167535    0.269097    0.164931    1961596800  1987-01-01 05:00:00 CDLHIKKAKE_Bear 1.0 MSFT
11  539154000   0.266493    0.253906    0.276042    0.230903    1834272000  1987-02-01 05:00:00 NO_PATTERN  0.0 MSFT
12  541573200   0.335938    0.266493    0.343750    0.255208    1783324800  1987-03-01 05:00:00 NO_PATTERN  0.0 MSFT
13  544251600   0.361111    0.335938    0.378472    0.314236    2118585600  1987-04-01 05:00:00 NO_PATTERN  0.0 MSFT
14  546840000   0.400174    0.361111    0.445312    0.356771    2192054400  1987-05-01 04:00:00 CDLBELTHOLD_Bull    1.0 MSFT
15  549518400   0.354167    0.400174    0.400174    0.334201    1729353600  1987-06-01 04:00:00 CDLBELTHOLD_Bear    1.0 MSFT
16  552110400   0.326389    0.353299    0.367188    0.307292    1813536000  1987-07-01 04:00:00 NO_PATTERN  0.0 MSFT
17  554788800   0.412326    0.326389    0.421007    0.316840    2034921600  1987-08-01 04:00:00 CDLMORNINGSTAR_Bull 2.0 MSFT
18  557467200   0.460069    0.409722    0.462674    0.368056    1554902400  1987-09-01 04:00:00 CDLCLOSINGMARUBOZU_Bull 1.0 MSFT
19  560059200   0.345486    0.460069    0.550347    0.258681    3567219200  1987-10-01 04:00:00 NO_PATTERN  0.0 MSFT
20  562741200   0.310764    0.342014    0.361111    0.281250    1550172800  1987-11-01 05:00:00 NO_PATTERN  0.0 MSFT
21  565333200   0.376736    0.309028    0.388889    0.277778    1780182400  1987-12-01 05:00:00 CDLENGULFING_Bull   1.0 MSFT
22  568011600   0.387153    0.380208    0.428819    0.364583    1966780800  1988-01-01 05:00:00 CDL3OUTSIDE_Bull    7.0 MSFT
我需要添加两列: 在接下来的3行中增加了5%。 这应该是0或1,取决于接下来3行的CLOSE列是否增加了5%。代码应该只适用于包含“BULL”单词的模式的行

第二列应该是在接下来的3行中增加的实际百分比

显然,这不可能计算pandas数据帧的最后3行,因此代码需要处理这个问题

更新:

  • 未来,数据帧将拥有所有库存,而不仅仅是MSFT
  • 从当前行到下一行的5%
    解决方案中最重要的是使用:

    • .shift(-3)
      向前看3天
    • .groupby('SYMBOL')['close'].transform()结合使用,在数据帧中的每一行的相同库存组中执行此操作
    .shift()上的文档:

    .groupby().transform()上的文档:

    #获取子集只是为了更好地了解正在发生的事情
    #排序对于以后的计算很重要
    df_子集=df[
    ['SYMBOL','datetime',
    “关闭”、“烛台图案”]
    ].sort_值(按=['SYMBOL','datetime'])
    #检查符号组中的未来值。使用shift(-3)向前看3。
    df_子集['shift_3_rows_ahead']=(df_子集
    .groupby('SYMBOL')['close']
    .transform(lambda x:x.shift(-3)))
    #计算增长百分比
    df_子集['perc_increase']=(
    (df_子集['shift_3_rows_ahead']
    /df_子集['close']-1)*100)
    #检查百分比增加是否大于5%
    df_子集[‘增加_大于_百分之五]]=df_子集[‘百分比增加’]>5。
    #检查相关列是否包含单词bull
    df_子集['contains_bull']=df_子集['candlestick_pattern'].str.contains('bull',case=False)
    #检查列是否包含牛市,以及未来增长是否大于5%
    df_子集[“应该看”]=(
    df_子集['contains_bull']
    &df_子集[‘增加_大于_百分之五’]
    )
    
    Hi Luis,当你说在接下来的3行中增加了5%时,你的意思是这3行中的任何一行都应该增加5%吗?或者当前的第3行应该高出5%?其他问题:我想你想要每支股票的价格?或者您的数据帧中只有一个库存?你能用这些信息更新这个问题吗?只是编辑一下,我希望它更清楚