파이썬에서 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
s.apply(func2)
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')
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 구매 페이지
'여러 가지 이야기 > 파이썬 및 그 밖의 라이브러리의 팁' 카테고리의 다른 글
[matplotlib] 이름이 지정된 색상 목록 (0) | 2024.10.21 |
---|---|
[matplotlib] 텍스트를 입력할 때 좌표 설정 방법 (0) | 2024.05.06 |
[python] 콤마와 자릿수를 동시에 설정하는 문자열 포매팅 방법 (0) | 2024.05.05 |
[구글 코랩] matplotlib 기반 그래프에 한글 폰트를 적용하는 방법 (0) | 2023.08.22 |
[python] 조건문이 포함된 함수를 lambda 함수로 생성하기 (0) | 2023.08.09 |