2015-01-13 2 views
1

2 개의 변수와 비교되는 데이터 프레임의 다른 열 (diff)에있는 조건부 데이터 프레임의 열 (신호)을 채우려고합니다. 채울이 열에는 구매, 판매, 보류 (표지)에 대해 3 가지 가능한 결과, 즉 1, -1, 0이 있습니다. 이것은 지금까지의 코드와 출력입니다. 적절한 인쇄가 잘 작동 이전 행을 무시하기 전에다른 열의 여러 조건에 기반한 pandas 데이터 프레임의 열 작성

import numpy as np 
import Quandl 
tlm = Quandl.get("GOOG/NYSE_TLM", trim_start="2014-12-01", trim_end="2015-01-01") 

tlm['diff'] = (tlm.Open - tlm.Close.shift(1))/tlm.Close.shift(1) # lags data 

lowerbound = -0.08 
upperbound = 0.08 

tlm['signal'] = np.where(tlm['diff'] >= upperbound, 1.0, 0.0) 
tlm['signal'] = np.where(tlm['diff'] <= lowerbound, -1.0, 0.0) 

print(tlm.head(20)) # is dataframe 

      Open High Low Close  Volume  diff signal 
Date                
2014-12-01 4.91 4.93 4.53 4.53 12999427  NaN  0 
2014-12-02 4.62 4.82 4.47 4.64 8015450 0.019868  0 
2014-12-03 4.51 4.83 4.48 4.63 9175510 -0.028017  0 
2014-12-04 4.59 4.62 4.04 4.05 16065766 -0.008639  0 
2014-12-05 4.05 4.09 3.86 3.94 8783581 0.000000  0 
2014-12-08 3.88 4.04 3.46 3.74 17497626 -0.015228  0 
2014-12-09 4.09 4.36 4.04 4.22 12559347 0.093583  0 
2014-12-10 4.20 4.20 3.67 3.79 12403674 -0.004739  0 
2014-12-11 3.74 3.95 3.67 3.69 9396960 -0.013193  0 
2014-12-12 5.05 5.24 4.17 4.29 75949020 0.368564  0 
2014-12-15 5.33 5.35 4.99 5.12 38834129 0.242424  0 
2014-12-16 7.47 7.60 7.46 7.58 282795097 0.458984  0 
2014-12-17 7.59 7.66 7.55 7.64 73152687 0.001319  0 
2014-12-18 7.68 7.82 7.66 7.78 55387941 0.005236  0 
2014-12-19 7.77 7.89 7.77 7.85 31330786 -0.001285  0 
2014-12-22 7.82 7.85 7.78 7.79 22758351 -0.003822  0 
2014-12-23 7.79 7.88 7.79 7.84 19068732 0.000000  0 
2014-12-24 7.83 7.86 7.82 7.84 9174813 -0.001276  0 
2014-12-26 7.84 7.86 7.82 7.85 9717732 0.000000  0 
2014-12-29 7.84 7.86 7.81 7.83 12035787 -0.001274  0 

위의 코드의 문제는 선, 당신은 신호 열에서 1 초를 볼 것입니다. 그래서 나는 for 조건문을위한 for 루프로 가야 만했지만 루프에서 Value 에러를 얻고있다. Numpy 배열과 관련된 부울 비교 문제를 일종의 이해하고 있지만 조건부를 비교할 수없는 경우 3 가지 조건 (1, -1, 0)을 어떻게 생성합니까?

코드 및 팬더에 초보자입니까? 미리 감사드립니다! 동등하게,하지만하지 판독 가능,

conditions = [tlm['diff'] >= upperbound, 
       tlm['diff'] <= lowerbound] 
choices = [1, -1] 

tlm['signal'] = np.select(conditions, choices, default=0) 

또는 :

답변

0

당신은 np.select를 사용할 수 물론

tlm['signal'] = np.where(tlm['diff'] >= upperbound, 1.0, 
         np.where(tlm['diff'] <= lowerbound, -1.0, 0.0)) 
+0

, 내가 인수의 또 다른 조건으로 제 2 조건을 참조 할 수 있습니다. 너는 신, 누부 야! – user2880845

관련 문제