보통 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함수로 써주시면 됩니다!
'IT > 파이썬' 카테고리의 다른 글
[그래프] Bar 그래프 그리기 (0) | 2021.02.02 |
---|---|
[그래프] box-plot 그리기 (0) | 2021.01.27 |
[시간 데이터 다루기] rsub활용하여 시간차이 구하기 (0) | 2021.01.08 |
[시간 데이터 다루기] to_datetime활용하기 (0) | 2021.01.06 |
applymap 활용하기 (0) | 2021.01.05 |