[Python] pandas IF-Else 조건문 5가지 방법

Hello! ·2023년 1월 21일
1

Python

목록 보기
1/1
post-thumbnail
post-custom-banner

조건문은 다양한 프로그래밍 언어에서 데이터를 전처리하는 방법 중에서 빠질 수 없는 구문입니다.

Python에서 조건에 따른 값 할당을 어떻게 하는지 크게 5가지 방법으로 나누어 정리하였습니다.

세부적으로 정리하자면, binary or multiple condition에 따라서 사용하는 방식을 나누어 보았습니다.

  1. binary condition
    • np.where() function
    • lambda 형식
  1. multiple condition
    • np.select()
    • pd.apply()
    • df.loc()

** 예제 데이터는 아래와 같습니다.


1. numpy.where() 함수


  • ‘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, '상반기', '하반기')


2. lambda 형식


  • 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 '하반기')


3. numpy.select() function


  • 다양한 조건을 포함하는 카테고리 컬럼을 만들 때

  • condition 대한 리스트 생성 -> 조건에 해당하는 value 리스트 생성 -> np.select() 함수를 이용하여 적용

    1. 순서대로 조건을 명시하여 리스트를 생성하기

      #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)
          ]
      
    2. 위 순서의 각 조건에 해당하는 값(’label’)을 할당하여 파이썬 리스트로 생성

      #create a python list of values to be assigned to the conditions
      values = ['겨울', '봄', '여름', '가을']
    3. 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'])

4. pandas apply 함수

  • 조건을 특정하는 함수를 생성한 후 → 컬럼에 적용
    1. 함수 생성

      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
    2. 컬럼에 함수 적용

      
      #Apply the function to each data point in the data frame
      dfTest['계절2']= dfTest.apply(conditions, axis=1)


5. DataFame loc function() 활용


  • np.select와 비슷한 원리
  • 데이터프레임의 loc함수를 통해 특정 조건의 row에 새로운 column을 부여하여 값을 할당하는 방식
  • df.loc[기존 행의 조건 입력, ‘새로운 열’] = ‘label’
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'] = '가을'


[자료 링크]

profile
Let's study
post-custom-banner

0개의 댓글