데이터프레임 전체에 한 번에 함수를 적용하고 싶다면 pandas의 pipe() 메서드를 활용하는 것이 가장 깔끔한 방법입니다. 이 글에서는 사용자 정의 함수를 데이터프레임 전체(테이블 단위)에 적용하는 방법을 예제와 함께 살펴보겠습니다.
예를 들어 다음과 같은 데이터프레임이 있고, 여기에 테이블 단위 함수를 적용하면 아래와 같은 결과를 얻을 수 있습니다.
Table wise function:
Id Mark
0 6.0 85.0
1 7.0 95.0
2 8.0 75.0
3 9.0 90.0
4 10.0 95.0
해결 방법
다음 단계를 순서대로 따라 하면 문제를 쉽게 해결할 수 있습니다.
먼저 데이터프레임을 정의합니다.
두 개의 인자를 받아
(a + b/2)를 반환하는 사용자 정의 함수avg를 생성합니다.
def avg(a, b):
return (a + b / 2)
pipe()함수를 호출하여 첫 번째 인자로avg함수를, 두 번째 인자로 10을 전달합니다. 이렇게 하면 데이터프레임의 모든 값에 대해 일괄적으로 계산이 수행됩니다.
df.pipe(avg, 10)
예제 코드
아래 전체 코드를 통해 더 자세히 이해해 보겠습니다.
import pandas as pd
df = pd.DataFrame({'Id': [1, 2, 3, 4, 5], 'Mark': [80, 90, 70, 85, 90]})
print("DataFrame is:\n", df)
print("Table wise function:")
def avg(a, b):
return (a + b / 2)
print(df.pipe(avg, 10))
동작 원리
pipe()는 데이터프레임 전체를 하나의 객체로 받아 지정된 함수에 전달합니다. 위 예제에서 avg(a, b) 함수는 데이터프레임과 10을 인자로 받아 각 값에 대해 a + b/2, 즉 기존 값에 5를 더한 결과를 반환합니다. 그래서 Id 열은 1→6.0, 2→7.0처럼 변하고, Mark 열은 80→85.0, 90→95.0으로 계산되는 것입니다.
실행 결과
DataFrame is:
Id Mark
0 1 80
1 2 90
2 3 70
3 4 85
4 5 90
Table wise function:
Id Mark
0 6.0 85.0
1 7.0 95.0
2 8.0 75.0
3 9.0 90.0
4 10.0 95.0