0

I have a Pandas Dataframe and I am trying to add a new column where the value in the new column is dependant on some conditions in the existing Dataframe. The Dataframe I have is as follows:

Date / Time Open High Low Close Volume
2020-06-02 16:30:00 1.25566 1.25696 1.25439 1.25634 2720
2020-06-02 17:00:00 1.25638 1.25683 1.25532 1.25614 2800
2020-06-02 17:30:00 1.25615 1.25699 1.25520 1.25565 2827
2020-06-02 18:00:00 1.25565 1.25598 1.25334 1.25341 2993
2020-06-02 18:30:00 1.25341 1.25385 1.25272 1.25287 1899
2020-07-03 07:00:00 1.24651 1.24673 1.24596 1.24603 600
2020-07-03 07:30:00 1.24601 1.24641 1.24568 1.24594 487
2020-07-03 08:00:00 1.24593 1.24618 1.24580 1.24612 455
2020-07-03 08:30:00 1.24612 1.24667 1.24603 1.24666 552
2020-07-03 09:00:00 1.24666 1.24785 1.24623 1.24765 922

I would like to add a new column called 'Signal', which is dependant on the following if and else statements. I have written these into a Function:

def BullEngulf(df):   
    if (df['Open'] <= df['Close'].shift(1)) and (df['Close'] > df['Open'].shift(1)) and (df['Close'].shift(1) < df['Open'].shift(1)):
    return 'Open'
    else:
    return '0'

I have then tried to apply the function as follows:

df['Signal'] = df.apply(BullEngulf)
df

When I run the code, the following error message occurs:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-62-f87af322a959> in <module>
      5         return '0'
      6 
----> 7 df['Signal'] = df.apply(BullEngulf)
      8 df

~\anaconda3\lib\site-packages\pandas\core\frame.py in apply(self, func, axis, raw, result_type, args, **kwds)
   6876             kwds=kwds,
   6877         )
-> 6878         return op.get_result()
   6879 
   6880     def applymap(self, func) -> "DataFrame":

~\anaconda3\lib\site-packages\pandas\core\apply.py in get_result(self)
    184             return self.apply_raw()
    185 
--> 186         return self.apply_standard()
    187 
    188     def apply_empty_result(self):

~\anaconda3\lib\site-packages\pandas\core\apply.py in apply_standard(self)
    293 
    294             try:
--> 295                 result = libreduction.compute_reduction(
    296                     values, self.f, axis=self.axis, dummy=dummy, labels=labels
    297                 )

pandas\_libs\reduction.pyx in pandas._libs.reduction.compute_reduction()

pandas\_libs\reduction.pyx in pandas._libs.reduction.Reducer.get_result()

<ipython-input-62-f87af322a959> in BullEngulf(df)
      1 def BullEngulf(df):
----> 2     if (df['Open'] <= df['Close'].shift(1)) and (df['Close'] > df['Open'].shift(1)) and (df['Close'].shift(1) < df['Open'].shift(1)):
      3         return 'Open'
      4     else:
      5         return '0'

~\anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key)
    869         key = com.apply_if_callable(key, self)
    870         try:
--> 871             result = self.index.get_value(self, key)
    872 
    873             if not is_scalar(result):

~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key)
   4403         k = self._convert_scalar_indexer(k, kind="getitem")
   4404         try:
-> 4405             return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None))
   4406         except KeyError as e1:
   4407             if len(self) > 0 and (self.holds_integer() or self.is_boolean()):

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index_class_helper.pxi in pandas._libs.index.Int64Engine._check_type()

KeyError: 'Open'

Please could somebody explain what is wrong with the code above?

Thanks

1 Answer 1

1

Try:

df['Signal'] = np.where((df['Open'] <= df['Close'].shift(1)) &
                        (df['Close'] > df['Open'].shift(1))  &
                        (df['Close'].shift(1) < df['Open'].shift(1)),
                        'Open', '0')
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.