Как разрешить циклическую ссылку между столбцами данных в пандах? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть мультииндексный фрейм данных с индексами Date и Symbol.Фрейм данных имеет около 10 миллионов строк.Кадр данных имеет столбец Entry_signal со значениями True или False, другой столбец Initial_stop с числовыми значениями и еще один столбец Low с числовыми значениями.Основываясь на содержании этих трех столбцов, я хочу вычислить еще три столбца: Stop_level, Position, Exit_signal.Они должны быть рассчитаны на основе следующей логики:

data['Entry_signal'] = # True or False
data['Initial_stop'] = # numbers
data['Low'] = # numbers

data['Stop_level'] = np.where(data['Position'] == True,
                              np.maximum(data['Stop_level'].shift(1),
                                         data['Initial_stop']),
                              data['Initial_stop'])

data['Exit_signal'] = np.where(data['Low'] < data.groupby('Symbol')['Stop_level'].shift(1),
                               True,
                               False)

data['Position'] = np.where(data['Exit_signal'] == True,
                            False,
                            np.where(data['Entry_signal'] == True,
                                     True,
                                     data.groupby('Symbol')['Position'].shift(1)))

data['Position'] = data.groupby('Symbol')['Position'].ffill()

Теперь Stop_level вызывает ошибку, потому что для этого требуется Position.Если я поставлю Position в начале, это вызовет ошибку, потому что ему нужно Exit_signal.Если я поставлю Exit_signal в начале, это вызовет ошибку, потому что ему нужно Stop_level.И так далее.Как я могу заставить эту логику работать?

1 Ответ

0 голосов
/ 04 октября 2018

Запишите это на клочке бумаги:

  1. Stop_level является функцией: Position, Stop_level, Initial_stop.
  2. Exit_signalявляется функцией: Low, Symbol, Stop_level.
  3. Position является функцией: Exit_signal, Entry_signal, Symbol, Position.

Текущий заказ не работает, потому что Stop_level требует Position.Помещение Position первым не работает, так как требует Exit_signal.Помещение Exit_signal на первое не работает, так как требует Stop_level.Это исчерпывает все ваши возможности.

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

...