Python系列在数据帧错误中含糊不清

这是数据帧并使用它我正在进行逻辑操作,抛出错误如下.我怎样才能克服这个问题?

Traceback (most recent call last):
    in <module>
    if( eoddf['High'][Open] > linebreakvalue):
  File "", line , in __nonzero__
    .format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

逻辑低于表格:

eoddf :(数据帧)

           Symbol Series  Prev Close    Open    High     Low    Last   Close  \
Date                                                                           
2015-01-01   SBIN     EQ      311.85  312.45  315.00  310.70  314.00  314.00   
2015-01-02   SBIN     EQ      314.00  314.35  318.30  314.35  315.60  315.25   
2015-01-05   SBIN     EQ      315.25  316.25  316.80  312.10  312.80  312.75   
2015-01-06   SBIN     EQ      312.75  310.00  311.10  298.70  299.90  299.90   
2015-01-07   SBIN     EQ      299.90  300.00  302.55  295.15  301.40  300.15   
2015-01-08   SBIN     EQ      300.15  305.00  306.50  302.35  305.25  304.85   
2015-01-09   SBIN     EQ      304.85  306.70  307.85  302.00  303.00  303.20   
2015-01-12   SBIN     EQ      303.20  304.15  307.80  301.10  306.90  307.10   
2015-01-13   SBIN     EQ      307.10  308.15  310.75  304.15  305.25  305.10   
2015-01-14   SBIN     EQ      305.10  304.00  307.00  302.25  305.00  304.70   
2015-01-15   SBIN     EQ      304.70  319.90  323.70  314.00  318.40  320.30   
2015-01-16   SBIN     EQ      320.30  320.00  320.30  313.10  315.25  315.45   
2015-01-19   SBIN     EQ      315.45  316.55  317.95  312.50  313.20  313.15   
2015-01-20   SBIN     EQ      313.15  314.00  319.80  314.00  318.00  318.15   
2015-01-21   SBIN     EQ      318.15  319.90  327.60  319.00  326.00  326.20   
2015-01-22   SBIN     EQ      326.20  326.90  327.60  321.80  325.20  324.65   
2015-01-23   SBIN     EQ      324.65  328.25  332.55  324.65  327.05  327.45   
2015-01-27   SBIN     EQ      327.45  329.40  332.15  322.60  331.45  330.05   
2015-01-28   SBIN     EQ      330.05  330.40  336.00  328.20  333.40  334.60

码:

 for Open in range(1, len(eoddf)):
     if( eoddf['High'][Open] > linebreakvalue):
        eoddf['LBHigh']{Open]=eoddf['High'][Open]
        eoddf['LBLow'][Open] =eoddf['Low'][Open]
        linebreakvalue = eoddf['LBHigh'][Open]
     if( eoddf['Low'][Open] < linebreakvalue):
        eoddf['LBHigh'][Open]=eoddf['Low'][Open]
        eoddf['LBLow'][Open] =eoddf['High'][Open]
        linebreakvalue = eoddf['LBLow'][Open]

我正在尝试将此MQ4代码写入Python以满足我的需要.代码参考在这里http://www.35pip.com/metatrader-indicators/indicators/3LineBreak.mq4

另外我想运行这个循环,直到Open列的最后一个条目更好的循环或其他方法可以在这里使用?

基本上我试图将这段代码转换为Python

OLDSwing=Swing;
VALUE1=High[Highest(NULL,0,MODE_HIGH,Lines_Break,shift+1)];
VALUE2= Low[Lowest(NULL,0,MODE_LOW,Lines_Break,shift+1)];
if (OLDSwing==1 &&  Low[shift]<VALUE2) Swing=-1;
if (OLDSwing==-1 && High[shift]>VALUE1 ) Swing=1;
if (Swing==1) 
   { HighBuffer[shift]=High[shift]; LowBuffer[shift]=Low[shift]; }
if (Swing==-1)
{ LowBuffer[shift]=High[shift]; HighBuffer[shift]=Low[shift]; }

而规则是:

>如果价格超过上一行的高价,则会绘制一条新的绿线
>如果价格低于前一行的低价,则会绘制一条新的红线
>如果价格没有上涨也不低于前一行,则不会产生任何结果
>如果反弹足够强大以形成三条连续的绿线,那么只有当价格低于最后三条绿线的最低点时才会绘制新的红线.
>如果抛售足够强大以形成三条连续的红线,那么只有当价格上涨超过最后三条红线的最高点时,才会绘制新的绿线.

做这个的最好方式是什么 ?

解决方法:

这就是你寻求的:

eoddf['LBHigh'] = df.apply(lambda x: x['High'] if x['High'] > linebreakvalue else x['Low'], axis=1)
eoddf['LBLow'] = df.apply(lambda x: x['Low'] if x['Low'] < linebreakvalue else x['High'], axis=1)

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...