let us not love with words or tongue but actions and truth.

IT/파이썬

if문과 apply함수로 파생변수 만들기

sarah0518 2021. 8. 4. 17:57

지난번에 if문과 map함수로 파생변수 만들기를 연습해봤다면,
https://sarah0518.tistory.com/69?category=984180

 

if문과 map함수로 파생변수 만들기

보통 SQL에 익숙하신 분들은 파생변수 만들때 case, when, then 문이 자동으로 생각나실거에요. 파이썬에서는 간단하게는 map함수를 쓰거나, 아니면 if문으로 파생변수를 새로 만들어서 컬럼으로 활용

sarah0518.tistory.com


이번에는 apply함수로 파생변수만들기를 해볼거에요.

apply함수는 다양하게 쓰일 수 있는데,
이것도 지난번에 다뤘던 것처럼 applymap과 유사하다고 생각하면 됩니다.

가장 큰 차이점은 
applymap은 dataframe에만 사용이 가능하지만,
apply는 dataframe 또는 series에 모두 사용이 가능해요.

그래서 아래와 같이 조건에 따라 return되는 값이 달라지는 함수를 
미리 만들 어 준 다음에
간단히 apply함수를 적용해 주면 됩니다.

함수를 조금 더 자세히 설명해 보자면,
우선 기존에 label된 값은 2가지였어요.
정상이면 1, 불량이면 0으로요

그리고 같은 데이터셋에 predicted된 값을 pred라는 변수에 넣어줬습니다.
pred변수도 정상이면 1, 불량이면 0으로 표시되어있습니다.

 

1
2
3
4
5
6
7
8
9
def classified_result(df_name):
    if df_name['target']==0 and df_name['pred']==0:
        return 'TN'
    elif df_name['target']==1 and df_name['pred']==1:
        return 'TP'
    elif df_name['target']==0 and df_name['pred']==1:
        return'FP'
    else:
        return 'FN'
cs

 

 

따라서, target=0, pred=0이면 True Negative로 
불량을 불량으로 잘 맞춘 것이고

target=1, pred=1이면 True Positive로
정상을 정상으로 잘 맞춘 것,

target=0, pred=1이면 False Positive로
불량인데 정상으로 잘 못 판단한 것이고

마지막은 False Negative로 정상인데 불량으로 판단한 것입니다.

 

1
df['result']=df.apply(classified_result, axis=1)
cs

 

 

이제, 위의 함수를 적용하여 만든 새로운 변수 result에 
TN, TP, FP, FN값을 넣어 주기 위해 위와 같이
한 줄만 추가로 더 적어주면 끝!

혹시 궁금해 하실 분이 계실테니,
만약 apply대신 applymap을 사용하면
아래와 같은 error msg가 나오니 참고하세요.