2014-09-19 3 views
0

열 C = 'a'이면 열 A와 같고 열 C = 'b'이면 열 B와 같은 데이터 프레임에 새 열을 만들고 싶습니다. 이것을 구현했습니다 :다른 열, 벡터화 된 판다의 조건에 따라 열을 선택하십시오.

def f(row): 
    if row['C'] = 'a': 
     return row['A'] 
    elif row['C'] = 'b': 
     return row['B'] 
    return np.nan 

df['new'] = df.apply(f, axis=1) 

느리게 실행되는 것처럼 느낍니다. The answer here은 이것이 벡터화되지 않았다고 설명합니다.

또는 :

df.ix[df[C]=='a',df['new']] = df.ix[df[C]=='a',df['A']] 
df.ix[df[C]=='b',df['new']] = df.ix[df[C]=='b',df['B']] 

이 벡터화인가? 판다에서 이렇게하는 다른 '올바른'방법이 있습니까? 벡터화 된 함수는 어떻게 다릅니 까?

+1

이 적용 단지 루프 피해야한다 시도 가능한 경우, 솔루션 당신이 원하는 일을 여러 가지 방법이 있습니다, 괜찮습니다. 데이터의 크기에 따라 샘플 코드가 단순화 될 수 있습니다 :'df.loc [df [ 'C'] == 'a', 'new'] = df [ 'A']' 조건 – EdChum

답변

0

df["new"]=np.nan 
df["new"][df["C"]=='a']=df["A"] 
df["new"][df["C"]=='b']=df["B"] 
+0

나는 그것을 단순화 된 버전으로 좋아한다. 다른 한편으로는 Excel의 중첩 된 'if'문을 그리워합니다. 나는 이유를 모른다! – KieranPC

관련 문제