본문 바로가기

Pandas/응용

판다스 - groupby : apply와 transform (차이)

반응형

[개별 원소]

  apply transform

[공통]

컬럼명을 메서드 밖에서 명시하면 결과는 같게 나온다.
[차이1]

컬럼명을 메서드 안에서 명시하면
그룹별 시리즈 리턴 에러
[차이2]

컬럼명을 메서드 안과 밖에
모두 명시하지 않는다면
기존 데이터의 자료형과 함수가

연산 가능해야만 실행된다.
연산 가능한 컬럼만 알아서

필터링되어 결과가 나온다.
[차이3]

연산 가능한 컬럼만 함수 적용한다면
그룹별 데이터프레임 출력

(멀티인덱스)
기존 인덱스 유지

 

 

 

 

 

 

 

 

 

데이터 불러오기

 

타이타닉의 일부데이터를 불러와

 

class별로 그룹화 했다.

 

 

차이를 보기위해 아주 간단한 함수를 정의한다.

 

개별 원소에 1을 뺀다.

 

 

 

[공통]

 

컬럼명을 메서드 밖에서 명시한다면

 

apply와 transform의 결과는 동일하다.

 

888번 행은 원래 NaN이기 때문에 False가 나왔으나

 

적용한 값은 모두 동일하다.

 

 

 

 

 

[차이1]

컬럼명을 메서드 안에서 명시한다면

 

apply의 그룹별 연산 결과 리턴

 

아래는 age 컬럼을 기준으로 실행한다.

 

 

이처럼 apply 안에 컬럼명을 명시하면

 

그룹별 시리즈가 리턴된다.

 

 

transform은 어떨까?

 

에러가 나온다.

 

이렇게 사용할 수 없다.

 

 

 

 

 

 

[차이2]

컬럼명을 메서드 안, 밖에 모두 명시하지 않는다면

 

transform은 연산 가능한 컬럼만 알아서 필터링 된다.

 

1을 뺄 수 없는 

 

성별 컬럼은 알아서 결과에 나오지 않고, 에러도 발생하지 않는다.

 

 

 

 

apply는 어떨까?

 

apply는 컬럼을 명시하지 않으면 에러가 발생한다.

 

알아서 연산 불가능한 컬럼을 필터링해주지 않는 것이다.

 

 

 

 

[차이3]

transform - 기존 인덱스 유지

apply - 그룹별 출력

 

 

차이 3을 보기 위해 새 데이터를 만들어보자

 

알파벳별 그룹화

 

 

누락값을 평균값으로 채우는 함수

 

 

그룹별, 컬럼별 평균값이 누락값으로 잘 채워졌다.

 

여기서 중요한 것은 기존 데이터프레임의 인덱스를 유지한다는 것이다.

 

 

 

 

 

 

apply는 어떨까?

 

 

그룹별 누락값을 잘 채웠으나

 

transform과 다른 것은 그룹별 멀티인덱스로 출력되는 것이다.

 

(멀티인덱스 데이터프레임)

 

물론 모두 숫자로 되어있기 때문에 차이2를 무시하고 

 

진행될 수 있었다.

 

 

 

 

 

 

데이터 분석을 위해선 이러한 차이를 반드시 알아야하는 것은 아니다.

 

다만 적재적소에 메서드를 구별해서

 

필요한 내용을 전처리하거나

 

구별해서 활용할 줄 알아야할 것이다.

반응형