Moondra
Moondra

Reputation: 4511

Can't correctly assign values to a new column, when using boolean indexing (Pandas)

I have a column Close_open of Dateframe df:

Date
2010-02-11    0.00
2010-02-12    0.23
2010-03-19    0.02
2010-04-12    0.05
2010-04-13    0.15
2010-05-07    0.09
2010-05-12    0.03
2010-05-26    0.02
2010-06-18   -0.03
2010-06-22   -0.03

I'm trying to create a new column, Changed whose value is true when there is a change of sign (going from positive to negative or vice versa) in the Close_open column.

I tried the following code, but I get all falses, when i should be getting at least one true.

for i in range(1,10):
        df['Changed'] =abs((df['close_open'][i]) +(df['close_open'][i-1])) < abs(df['close_open'][i])

Result =

Date           Changed                    
2010-02-11     False  
2010-02-12     False  
2010-03-19     False  
2010-04-12     False  
2010-04-13     False  
2010-05-07     False  
2010-05-12     False  
2010-05-26     False  
2010-06-18     False  
2010-06-22     False  

However, when I run this code (same code, only not assigning to a df column)

for i in range(1,10):
    abs((df['close_open'][i]) +(df['close_open'][i-1])) < abs(df['close_open'][i])

I get the following output:

False
False
False
False
False
False
False
True
False

Upvotes: 1

Views: 39

Answers (1)

JohnE
JohnE

Reputation: 30424

I'd recommend doing it like this:

df['changed'] = df['close_open'] * df['close_open'].shift() < 0

            close_open changed
2010-02-11        0.00   False
2010-02-12        0.23   False
2010-03-19        0.02   False
2010-04-12        0.05   False
2010-04-13        0.15   False
2010-05-07        0.09   False
2010-05-12        0.03   False
2010-05-26        0.02   False
2010-06-18       -0.03    True
2010-06-22       -0.03   False

Upvotes: 2

Related Questions