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

IT/파이썬

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

sarah0518 2021. 1. 25. 23:32
728x90

보통 SQL에 익숙하신 분들은 파생변수 만들때 case, when, then 문이 자동으로 생각나실거에요.

 

파이썬에서는 간단하게는 map함수를 쓰거나, 

아니면 if문으로 파생변수를 새로 만들어서 컬럼으로 활용할 수 있습니다.

 

아래와 같은 예시 데이터가 있다고 할때,

우리는 mon라는 컬럼을 활용해서 new_col이라는 컬럼을 생성해볼게요.

 

방법1. if문으로 파생변수 만들기

 

 

 

코드 복사하시라고 아래 편집해놨어요.

 

실제 test.shape[0]의 값은 6이니, 0~5까지의 range로 list의 length가 정해지게 해뒀어요.

또, def함수를 써서, new_col_creating이라는 함수를 선언했습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
temp=list(range(test.shape[0]))
def new_col_creating(df_name):
    for i in range(df_name.shape[0]):
        if df_name.iloc[i]['mon']<= 3:
            temp[i] = '3이하'
        if df_name.iloc[i]['mon']==4:
            temp[i] = '4와 같다'
        elif df_name.iloc[i]['mon']==5:
            temp[i] = '5와 같다'
    return temp
 
test['new_col']=new_col_creating(test)
cs

 

 

 

 

 

방법2. map함수로 파생변수 만들기

 

훨씬 간단하게, 각자 mon컬럼의 value값에 mapping할 값들을 써주면 돼요.

 

copy 가능한 코드입니다.


1
2
map_mon={1:'3이하',2:'3이하',3:'3이하',4:'4와 같다',5:'5와 같다'}
test['new_col2']=test['mon'].map(map_mon)
cs

 

근데, 방법1과 방법2는 장단점이 있어요.

 

 

방법1은 참고해야할 변수(여기서는 mon)이 숫자형 또는 연속형일 경우좋아요!

예를 들어, 100단위로 끊어서 컬럼을 만들경우

100이하, 100초과 이런식으로 할때는 if 문이 더 편하겠지요.

 

 

방법2는 카테고리형 변수일 때 좋아요.

예를 들어 소득이, 상위1분위-상위10분위, 하위1분위-하위10분위라는 컬럼을 가지고 있는 변수를 고소득/저소득로 구분하고 싶다면,

map_income={'상위1분위':'고소득', '상위10분위':'고소득', '하위1분위':'저소득, '하위10분위':'저소득'}

위에 처럼 써주면 되겠죠.

(카테고리형 변수는 구분해줄 것들이 연속형 변수보다 많지 않기때문에 간단히 map함수로 써주시면 됩니다!

 

 

 

 

 

728x90