2017-03-18 27 views
1

時,我有Dateframe df的列Close_open無法正確值分配到新列,使用布爾索引(熊貓)

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 

我試圖創建新列,Changed其值當Close_open列中的符號發生變化時(從正向負向或負向正向變化),則爲真。

我試了下面的代碼,但我得到所有的錯誤,當我應該得到至少一個真實。

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

結果=

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 

然而,當運行此代碼(相同的代碼,只不分配給一個DF列)

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

我得到以下輸出:

False 
False 
False 
False 
False 
False 
False 
True 
False 

回答

2

我推薦這樣做:

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 
+0

謝謝。這也適用。僅僅爲了學習的目的,有什麼辦法可以讓這個布爾過濾器工作:abs((df ['close_open'] [i])+(df ['close_open'] [i-1])) Moondra

+0

您只需要在左側添加'[i]':'df ['Changed'] [i]'。發生的情況是整列都被重寫了,所以你只是在所有行中看到i = 9的結果(如果你確實在範圍內(1,9),它在所有行中都是真的)。注意:不是推薦的方法,但它可以在此工作,僅用於學習目的。 – JohnE

+0

啊,我明白了。謝謝。 – Moondra