조건문은 다양한 프로그래밍 언어에서 데이터를 전처리하는 방법 중에서 빠질 수 없는 구문입니다.
Python에서 조건에 따른 값 할당을 어떻게 하는지 크게 5가지 방법으로 나누어 정리하였습니다.
세부적으로 정리하자면, binary or multiple condition에 따라서 사용하는 방식을 나누어 보았습니다.
** 예제 데이터는 아래와 같습니다.
‘True’ or ‘False’과 같은 이진 조건의 기반이 되는 새로운 컬럼을 추가할 때 유용한 함수임
np.where(condition, value if condition is true, value if condition is false)
예시 코드
import pandas as pd
import numpy as np
dfTest['분기'] = np.where(dfTest['월'] <= 6, '상반기', '하반기')
df['new column name'] = df['column name'].apply(lambda x: 'value if condition is true' if x condition else 'value if condition is false')
dfTest['분기'] = dfTest['월'].apply(lambda x: '상반기' if x <= 6 else '하반기')
다양한 조건을 포함하는 카테고리 컬럼을 만들 때
condition 대한 리스트 생성 -> 조건에 해당하는 value 리스트 생성 -> np.select() 함수를 이용하여 적용
순서대로 조건을 명시하여 리스트를 생성하기
#Create a python list to specify all the conditions
#Create a python list to specify all the conditions
conditions = [
(dfTest['월'] == 12) | (dfTest['월'] <= 2),
(dfTest['월'] >= 3) & (dfTest['월'] <= 5),
(dfTest['월'] >= 6) & (dfTest['월'] <= 8),
(dfTest['월'] >= 9) & (dfTest['월'] <= 11)
]
위 순서의 각 조건에 해당하는 값(’label’)을 할당하여 파이썬 리스트로 생성
#create a python list of values to be assigned to the conditions
values = ['겨울', '봄', '여름', '가을']
np.select() 함수를 사용하여 새로운 컬럼 생성
생성한 두 개의 리스트들을 arguments로 사용하여 np.select를 이용하여 새로운 컬럼으로 생성
# use np.select() to create a new column
dfTest['계절'] = np.select(conditions, values)
(참고) 1,2,3을 한 번에 적용할 때
df['visits_category'] = np.select([
(df['visits_30days'] == 0),
(df['visits_30days'] > 0) & (df['visits_30days'] <= 5),
(df['visits_30days'] > 5) & (df['visits_30days'] <= 10),
(df['visits_30days'] > 10)
], ['0 visits', '1-5 visits', '6-10 visits', '>10 visits'])
함수 생성
def conditions(row):
if (row['월'] == 12 ) | (row['월'] <= 2) :
val = '겨울'
elif (row['월'] >= 3) & (row['월'] <= 5 ):
val = '봄'
elif (row['월'] >= 6) & (row['월'] <= 8) :
val = '여름'
elif (row['월'] >= 9) & (row['월'] <= 11) :
val = '가을'
else:
val = 'NA'
return val
컬럼에 함수 적용
#Apply the function to each data point in the data frame
dfTest['계절2']= dfTest.apply(conditions, axis=1)
dfTest.loc[(dfTest['월'] == 12) | (dfTest['월'] <= 2), '계절3'] = '겨울'
dfTest.loc[(dfTest['월'] >= 3) & (dfTest['월'] <= 5), '계절3'] = '봄'
dfTest.loc[(dfTest['월'] >= 6) & (dfTest['월'] <= 8), '계절3'] = '여름'
dfTest.loc[(dfTest['월'] >= 9) & (dfTest['월'] <= 11) , '계절3'] = '가을'
[자료 링크]