2016-11-02 11 views
0

필자는 시작 값이 다음과 같은 기준을 충족시키는 열 (Col1)의 연속 팬더 데이터 프레임 행에서 충족되는 최소 기준 (0.6)을 확인하고자하는 시나리오가 있습니다. 최소 (0.7) 즉 : 값이 적어도 0.7 인 경우, 또는 다른 말로팬더 여러 최소 연속 기준을 확인하십시오.

Col1 
0.3 
0.5 
0.55 
0.8 = true 
0.65 = true 
0.9 = true 
0.61 = true 
0.3 
0.6 
0.67 
0.74 = true 
0.63 = true 
0.61 = true 

는 검사가 True 될 것이라고 값이 적어도 0.6이고 이전 값은 첫번째로 적어도 0.6 인 경우 연속 시리즈의 값은 적어도 0.7입니다.

매우 큰 데이터 집합에서 실행되므로 효율적이어야합니다. 나는 shift()으로 뭔가를 생각하고 있습니다 ...하지만 그걸 제대로 이해할 수는 없습니다.

답변

3

Series.where()을 사용하여 논리적 시리즈를 구성 할 수 있습니다.

는 단계 :

  • nan는 값으로 초기화 시리즈; 모든 값에 대한 진정한
  • 할당 0.7
  • 보다 큰 모든 값을 False로 지정할보다 작은 0.6 앞으로
  • 채울 수 누락 된 값의 시작 부분에 이전 값에 따라 0.6 ~ 0.7 사이의 값을 입력

    import pandas as pd 
    import numpy as np 
    df['check'] = np.nan 
    df['check'] = (df['check'].where(df.Col1 < 0.7, True) 
              .where(df.Col1 > 0.6, False) 
              .ffill().fillna(False) 
              .astype(bool)) 
    
    : 시리즈
  • 는 DTYPE (옵션)

그래서 부울로 변환

enter image description here

+0

매우 똑똑! 고맙습니다! – cwse

+0

'check'라는 새 열을 만들지 않고 col1의 선택 기준으로이 확인 논리를 어떻게 사용할 수 있습니까? 나는. df.col1.loc (... 귀하의 수락 기준을 충족합니다 ...). 가능하다면 .loc()을 사용하고 싶습니다. – cwse

+0

하위 집합을 위해'df.Col1 [df.check]'를 수행 한 다음, 확인 열을 삭제할 수 있습니다. 어떤 이유로 새로운 컬럼을 생성하고 싶지 않다면,'s = pd.Series ([np.nan] * df.shape [0], index = df.index); df.Col1.loc [d.Col1 <0.7, True) .where (df.Col1> 0.6, False) .ffill(). fillna (False) .astype (bool)]' – Psidom