Python熊猫NonZero(NZ(x,y)函数)元素计算-错误和异常,即使在逻辑中添加了.any()之后

时间:2019-02-21 11:21:39

标签: python pandas numpy numpy-ndarray numpy-broadcasting

这是我要转换为python的代码,在查询中有以下两个问题。

xATRT := if(
  

来源   nz(xATRT [1],0)和源[1]> nz(xATRT [1],0),max(nz(xATRT [1]),源/ nLoss)

有关此功能的简要说明:

比较源(该值来自熊猫数据帧df ['close'])和XATRT的先前元素值,即xATRT [1]。 nz(x,y)→系列

  

两个args版本:如果它是有效的数字(不是NaN),则返回x,   否则y

     

一个arg版本:如果它是有效(不是NaN)数字,则返回x,否则返回   0

问题1:

即使添加any()后,if条件也会失败,并显示警告。

  

发生异常Series的真值不明确。采用   a.empty,a.bool(),a.item(),a.any()或a.all()。

问题2:

在第一次迭代中执行从NZ(x,y)到函数的python的熊猫转换时,xATRT(xATRT [1])将没有任何先前的值,这肯定会引发错误/崩溃或手术失败。如何将代码转换为python代码而不丢失其计算。 是否有任何oneline内置代码来解决此问题,因为我必须针对许多条件进行此类计算。在np.where尝试过,但没有成功。

任何解决方案都值得赞赏。

df = calc_bgcalc_trail(df)

def calc_bgcalc_trail(df,nATRPeriod=20,nATRMultip=3,source='close',smooth1=1,smooth2=2):
    df['xATR'] = ta.ATR(np.asarray(df['high']),
                                 np.asarray(df['low']),
                                 np.asarray(df['close']),
                                 timeperiod=nATRPeriod)
    df['nLoss'] = nATRMultip * df['xATR']
    df['xATRT'] = 0.0
    if df[source] > df['xATRT'].iloc[-1].any() and df[source].iloc[-1] > df['xATRT'].iloc[-1].any() :
       df['xATRT'] = max(df['xATRT'].iloc[-1], df[source] / df['nLoss'])

熊猫样本

                 nlose    high        low      close  adjusted_close  \
date                                                                     
2002-07-01     5.2397     5.5409     5.2397     5.4127          0.0634   
2002-07-02     5.5234     5.5370     5.4214     5.4438          0.0638   
2002-07-03     5.5060     5.5458     5.3281     5.4661          0.0640   
2002-07-04     5.5011     5.5720     5.4175     5.5283          0.0647   
2002-07-05     5.5633     5.6566     5.4749     5.5905          0.0655   
2002-07-08     5.5011     5.7187     5.5011     5.6255          0.0659   
2002-07-09     5.5905     5.7586     5.5681     5.6167          0.0658   
2002-07-10     5.4885     5.4885     5.1465     5.2222          0.0612   
2002-07-11     4.9784     5.2135     4.9784     5.1863          0.0607   
2002-07-12     5.5011     5.5011     5.2446     5.3194          0.0623   
2002-07-15     5.3243     5.4797     5.1912     5.3330          0.0625   
2002-07-16     5.1999     5.4389     5.1999     5.3155          0.0623   
2002-07-17     4.7024     5.1377     4.6189     5.0445          0.0591   
2002-07-18     4.8803     5.1465     4.8356     5.0804          0.0595   
2002-07-19     5.0270     5.2038     5.0221     5.1513          0.0603   
2002-07-22     5.0804     5.1465     4.9687     4.9735          0.0582   
2002-07-23     4.8181     5.0843     4.8181     5.0619          0.0593   
2002-07-24     5.0580     5.1290     4.9376     5.0619          0.0593   
2002-07-25     5.0580     5.0580     4.7918     4.8492          0.0568

0 个答案:

没有答案