2016-06-29 3 views
1

중, 중 중 열에 대한 방법이 있습니까? ROW를 1로 바꾸려면 0보다 크면 맨 위 행이됩니까?조건이 충족 될 경우 행에있는 셀 바꾸기

    Conc  Less Middle Greater 
Date             
2005-03-02 00:00 10.3 0.000000 1   1 

이 내가 해봤 원래

    Conc  Less Middle Greater 
Date             
2005-03-02 00:00 10.3 0.000000 0.083333 0.916667 

2005-03-02 01:00 14.1 0.000000 0.750000 0.250000 

2005-03-02 02:00 7.0 0.000000 0.833333 0.166667 

2005-03-02 03:00 7.0 0.000000 1.000000 0.000000 

2005-03-02 04:00 7.2 0.000000 1.000000 0.000000 

2005-03-02 06:00 6.6 0.333333 0.666667 0.000000 

2005-03-02 07:00 6.6 0.416667 0.583333 0.000000 

입니다 :

df.loc[df['Less']>0:]=1 
df.loc[df['Less']==0:]=0 

하지만 빨간색에 표시 및 허위 사실 말한다 (올바른 장소에서)과 : DTYPE : bool, None, None)

나는 또한 시도했다 : 루핑을 통해 :

for line in df['Less']: 
    if df['Less'] >0: 
     df['Less']=1 

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

답변

1

당신은 부울 조건 loc를 사용할 수 있습니다

In [250]: 
df.loc[df['Less'] > 0, 'Less'] = 1 
df 

Out[250]: 
        Conc Less Middle Greater 
Date            
2005-03-02 00:00:00 10.3 0.0 0.083333 0.916667 
2005-03-02 01:00:00 14.1 0.0 0.750000 0.250000 
2005-03-02 02:00:00 7.0 0.0 0.833333 0.166667 
2005-03-02 03:00:00 7.0 0.0 1.000000 0.000000 
2005-03-02 04:00:00 7.2 0.0 1.000000 0.000000 
2005-03-02 06:00:00 6.6 1.0 0.666667 0.000000 
2005-03-02 07:00:00 6.6 1.0 0.583333 0.000000 

df.loc[df['Less']>0:], 당신은 쉼표를 사용하고

관심의 열 이름의 목록을 전달하는 데 유효하지 않은 구문하려는 귀하의 for 루프 버전 :

for line in df['Less']: 
    if df['Less'] >0: 
     df['Less']=1 

은 유효하지 않습니다. 왜냐하면 if은 부울 값의 배열을 해석하는 방법을 이해하지 못하기 때문에 if (df['Less'] >0).all() 또는 if (df['Less'] >0).any() 일 경우 오류가 발생하지만 행렬을 반복하면서 어쨌든 이해가되지 않지만 그런 다음 전체 df를 테스트하는 것은 낭비입니다.

columns = ['Less', 'Middle', 'Greater'] 
df[columns] = np.where(df[columns] >0, 1 ,0) 

또는 개별적으로 할 수있는 (열을 선택하는 이중 괄호 참고) :

+0

건배, 괜찮아요 아악을 일한 것 같다, 나는 그것을 시도했는데 .any()하지만 그 중 하나가 사실 일지라도 전체 df가 참이라고 가정했습니다. – SLE

0

한 번에 모든 작업을 수행하려면

df[['Less']] = np.where(df[['Less']] >0, 1 ,0) 
df[['Middle']] = np.where(df[['Middle']] >0, 1 ,0) 
df[['Greater']] = np.where(df[['Greater']] >0, 1 ,0) 
+0

np는 numpy 임포트 btw입니다. –

관련 문제