如何解决熊猫数据框列之间的循环引用?

时间:2018-10-04 13:05:24

标签: python pandas dataframe circular-reference

我有一个包含索引DateSymbol的多索引数据框。该数据框大约有1000万行。数据框具有带有Entry_signalTrue值的列False,带有数字值的另一列Initial_stop和带有数字值的另一列Low。基于这三列的内容,我想计算另外三列:Stop_levelPositionExit_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 :(得分:0)

将其写在纸片上

  1. Stop_level具有以下功能:PositionStop_levelInitial_stop
  2. Exit_signal是以下功能之一:LowSymbolStop_level
  3. Position具有以下功能:Exit_signalEntry_signalSymbolPosition

当前订单无效,因为Stop_level需要Position。首先放置Position无效,因为它需要Exit_signal。首先放置Exit_signal无效,因为它需要Stop_level。这会耗尽您的所有选择。

因此,您需要定义可以实际实现的逻辑。