본문 바로가기
Python/Pandas & numpy

.apply() / .agg() 함수

by Mr.DonyStark 2024. 2. 7.

□ .apply() 함수란?

  ○ 데이터프레임 조작시 함수사용을 위해 사용하는 기능

  ○ 적용대상 : 개별 요소 또는 축(axis)에 함수를 적용할 수 있습니다. 행이나 열 단위로 함수를 적용할 수 있음

  ○ 인자 : 사용자 정의 함수나 내장 함수를 인자로 받아 개별 요소 또는 축에 적용할 수 있음

  ○ 적용방법 : 주로 행 또는 열 단위로 함수를 적용할 때 사용

  ○ apply(함수, axis = 0 or 1)

  ○ axis = 0 or 1

import pandas as pd
import numpy as np

#데이터프레임 생성
df = pd.DataFrame(
    {
        "a" : [10,20,30],
        "b" : [20,30,40],
        "c" : [50,60,70]
    }
)

#함수정의
def my_sq(x):
    return x **2
    
# 새로운 필드 생성하며 채울 값은 a열의 값들에 my_sq(x) 함수를 통해 리턴된 값임
df['a_2'] = df['a'].apply(my_sq)

#함수정의
def avg_3(col):
    x = col[0]
    y = col[1]
    z = col[2]
    return (x+y+z)/3

result = df.apply(avg_3)

원본 로우데이터(맨왼쪽), 함수적용 컬럼추가 가공 데이터(가운데), 함수적용 가공 데이터(맨우측:result)

□ .agg() 함수란?

  ○ 적용대상 : 집계(aggregation function)를 사용하여 그룹화된 데이터에 대해 여러계산을 수행할 수 있으며 주로 집계에 사용

  ○ 인자 : 집계 함수를 인자로 받아 데이터프레임 또는 시리즈의 그룹에 대해 집계 연산 수행

  ○ 적용방법 : 그룹화된 데이터에 대한 집계함수를 적용할 때 사용

#라이브러리 호출
import pandas as pd
import numpy as np
df = pd.read_csv('C:/python/DataScience/Data/data/python_data/gapminder.tsv', delimiter='\t')

#함수정의 : 집계함수로 나온 시리즈 또는 값이 value를 통해 sum/n으로 리턴
def my_mean(values):
    n = len(values)
    sum = 0
    for i in values:
        sum += i
    return sum/n
    
#agg함수 적용
agg_my_mean1 = df.groupby('year')['lifeExp'].agg(my_mean)
# 판다스의 mean함수와 같음 agg_my_mean2 = df.groupby('year')['lifeExp'].mean()

#함수정의 : 집계결과인 시리즈 또는 값을 value로 받고, 다른 변수를 별도 받아 값을 리턴
def my_mean_diff(values,diff_value):
    n = len(values)
    sum = 0
    for value in values:
        sum += value
    mean = sum / n
    return (mean - diff_value)
    
#diff_value를 위한 변수지정
global_mean = df['lifeExp'].mean()
#agg함수를 활용해 함수 호출 및 매개변수 두개(my_mean_diff전달될 year그룹의 평균수명 값, diff_value 값) 전달
agg_mean_diff = (
    df.groupby('year')['lifeExp'].agg(my_mean_diff, diff_value = global_mean)
)

원본데이터(좌측), agg함수 my_mean적용 후 가공 데이터(가운데) agg함수 my_mean_diff 적용 후 가공 데이터(우측) 결과값은 모두 시리즈임