Python pandas Элемент вычисления NonZero (функция NZ (x, y)) - ошибка и исключение даже после добавления .any () в логику - PullRequest
0 голосов
/ 21 февраля 2019

Вот этот код, который я пытаюсь преобразовать в python, и у меня есть две проблемы, как показано ниже в запросе.

xATRT := if(

source nz (xATRT [1], 0) и source [1]> nz (xATRT [1], 0), max (nz (xATRT [1]), source / nLoss)

Краткое описание этой функции:

сравнить источник (значение берется из pandas dataframe df ['close']) с предыдущим значением элемента XATRT, т.е. xATRT [1].nz (x, y) → серия

Версия с двумя аргументами: возвращает x, если это действительное (не NaN) число, в противном случае y

Версия с одним аргументом: возвращает x, если этодействительное (не NaN) число, в противном случае 0

Проблема 1:

Условие if не выполняется с предупреждением даже после добавления любого () решения.

исключение произошло Истинное значение Серии неоднозначно.Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Проблема 2:

при выполненииОперация pandas для преобразования функции NZ (x, y) в python в первой итерации времени не будет иметь никакого предыдущего значения для xATRT (xATRT [1]), это определенно вызовет ошибку / сбой или операция не удалась.Как это, если код может быть преобразован в код Python без потери его расчета.Есть ли встроенный код oneline для решения этой проблемы, так как я должен сделать такой расчет для многих условий.попробовал np. где-то, но безуспешно.

Любое решение с благодарностью.

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
...