2017-05-17 3 views
0

나는 이동 평균과 2 개의 이동 평균이 교차 할 때 강조 표시되는 'maX'열의 데이터 프레임을 만들었습니다.데이터 프레임의 새 열을 반복 할 수없는 이유는 무엇입니까?

   OPEN HIGH LOW LAST  ma5  ma8 ma21 maX 
Date                
11/23/2009 88.84 89.19 88.58 88.97  NaN  NaN NaN 0.0 
11/24/2009 88.97 89.07 88.36 88.50  NaN  NaN NaN 0.0 
11/25/2009 88.50 88.63 87.22 87.35  NaN  NaN NaN 0.0 
11/26/2009 87.35 87.48 86.30 86.59  NaN  NaN NaN 0.0 
11/27/2009 86.59 87.02 84.83 86.53 87.588  NaN NaN 0.0 
11/30/2009 87.17 87.17 85.87 86.41 87.076  NaN NaN 0.0 
12/1/2009 86.41 87.53 86.17 86.68 86.712  NaN NaN 0.0 
12/2/2009 86.68 87.49 86.59 87.39 86.720 87.302 NaN 0.0 
12/3/2009 87.39 88.48 87.32 88.26 87.054 87.214 NaN 0.0 
12/4/2009 88.26 90.77 88.00 90.56 87.860 87.471 NaN 0.0 

그러나 새 열을 반복 할 수없는 이유는 무엇입니까? 내 코드;

Buy = [0,] 
maXLast = [0] 
for i in maX[1:]: 
    if i == 1 and maXLast == 0: 
     Buy.append(1) 
    elif i == 1 and maX == -1: 
     Buy.append(0) 
    else: 
     Buy.append(0) 
    maXLast = i 

print(Buy)  
Entry = pd.DataFrame(Buy,index = dfmas.index).astype('float') 
Entry.columns = ['Buy'] 
print(Entry) 

그러나 왜 내 코드는 반환하지 [0,0] '주문'이 아닌 1850 플로트 목록.

왜 'Enter'가 반환됩니까?

ValueError: Shape of passed values is (1, 2), indices imply (1, 1850) ??? 

미리 감사드립니다.

답변

1

팬더와 함께 for-loops를 사용하지 마십시오. 대신, 그것을 약 1000 배 빠른 것 벡터화 방법, 수행 어쨌든 그런

import numpy as np 
Buy = np.where(maX == 1, 1, 0) 

뭔가 - 당신은 np.where()에 조건을 조정할 필요가있다.

관련 문제