본문 바로가기
여러 가지 이야기/파이썬 및 그 밖의 라이브러리의 팁

[python] elif 문이 포함된 함수를 lambda 함수로 생성하기

by 김판다t 2023. 8. 9.

파이썬에서 elif 문이 포함된 함수를 lambda 함수로 생성하기

앞서 우리는 if 문을 포함한 함수를 lambda 함수로 변환하는 과정을 살펴보았습니다. 이번에는 elif 문을 포함한 조건문을 lambda 함수로 구현하는 방법을 알아보겠습니다.

 

https://kimpanda.tistory.com/178 (if문을 포함한 함수를 lambda 함수로 변환 링크)

 

 

예시: elif 문이 포함된 함수 정의

 

이번 예제에서는 입력값이 4 이상이면 'A', 3 이상 4 미만이면 'B', 그 외에는 'C'를 반환하는 함수를 작성해 보겠습니다.

 

Part1. def로 정의해보기

 

먼저, 전통적인 방식으로 def 문을 사용하여 함수를 정의합니다. 함수 이름은 func2로 하겠습니다. 

def func2(x):
    if x >= 4:
        return 'A'
    elif x >= 3:
        return 'B'
    else:
        return 'C'

 

 

이 함수에 3을 입력하면 'B'를 반환합니다.

func2(3)
'B'

 


Part 2: apply 메서드로 시리즈에 적용하기

 

이번에도 pandas 라이브러리의 apply 메서드를 사용하여 정의한 함수를 시리즈에 적용해보겠습니다. 예시 시리즈는 다음과 같습니다.

 
import pandas as pd
s = pd.Series([1, 2, 3, 4])
0    1
1    2
2    3
3    4
dtype: int64
 
apply 메서드를 사용하여 시리즈에 func2를 적용한 결과는 다음과 같습니다.
s.apply(func2)
 
결과를 s와 함께 놓고 비교하면 다음과 같습니다.
     s             s.apply(func2)    

0    1     ->        C   
1    2     ->        C
2    3     ->        B
3    4     ->        A

 

이처럼 값이 4 이상인 경우에는 'A', 3 이상 4 미만은 'B', 그 외의 값은 'C'가 반환되었습니다.


Part 3: 동일한 lambda 함수로 생성하기

 

이제, 앞서 정의한 func2와 동일한 기능을 하는 lambda 함수를 작성해보겠습니다. elif 문을 직접 사용할 수는 없지만, else 내부에 다시 if 문을 넣는 방식으로 구현할 수 있습니다.

lambda x: 'A' if x >= 4 else ('B' if x >= 3 else 'C')

 

lambda 함수를 시리즈에 적용해보면 다음과 같은 결과를 얻을 수 있습니다.
s.apply(lambda x: 'A' if x >= 4 else ('B' if x >= 3 else 'C'))
0    C
1    C
2    B
3    A
dtype: object

 

 

이와 같이 lambda 함수로도 동일한 결과를 얻을 수 있음을 확인할 수 있습니다.


주의사항

 

if 문을 포함하는 함수와 마찬가지로 판다스 사용자들은 대부분의 경우에는 elif 문을 포함한 함수를 직접 작성할 필요가 없습니다. np.select와 같은 넘파이 함수를 사용하면 훨씬 간결하게 처리할 수 있습니다. elif 조건문이 포함된 함수를 만드는 방법을 알고 있는 것은 유용하지만, 조건문 함수와 apply 메서드의 조합보다는 판다스와 넘파이에서 제공하는 불리언 마스킹 함수들을 사용하는 것이 더 효율적입니다.

 

import numpy as np
np.select([s >= 4, s >= 3], ['A', 'B'], 'C')

 

array(['C', 'C', 'B', 'A'], dtype='<U1')

교보문고 구매 페이지알라딘 구매 페이지yes24 구매 페이지

 

 

 
 

유튜브에서 판다스 강의 중입니다

 

https://www.youtube.com/@KimPandas