[개별 원소]
apply | transform | |
[공통] |
컬럼명을 메서드 밖에서 명시하면 결과는 같게 나온다. | |
[차이1] 컬럼명을 메서드 안에서 명시하면 |
그룹별 시리즈 리턴 | 에러 |
[차이2] 컬럼명을 메서드 안과 밖에 모두 명시하지 않는다면 |
기존 데이터의 자료형과 함수가 연산 가능해야만 실행된다. |
연산 가능한 컬럼만 알아서 필터링되어 결과가 나온다. |
[차이3] 연산 가능한 컬럼만 함수 적용한다면 |
그룹별 데이터프레임 출력 (멀티인덱스) |
기존 인덱스 유지 |
데이터 불러오기
타이타닉의 일부데이터를 불러와
class별로 그룹화 했다.
차이를 보기위해 아주 간단한 함수를 정의한다.
[공통]
컬럼명을 메서드 밖에서 명시한다면
apply와 transform의 결과는 동일하다.
888번 행은 원래 NaN이기 때문에 False가 나왔으나
적용한 값은 모두 동일하다.
[차이1]
컬럼명을 메서드 안에서 명시한다면
apply의 그룹별 연산 결과 리턴
아래는 age 컬럼을 기준으로 실행한다.
이처럼 apply 안에 컬럼명을 명시하면
그룹별 시리즈가 리턴된다.
transform은 어떨까?
에러가 나온다.
이렇게 사용할 수 없다.
[차이2]
컬럼명을 메서드 안, 밖에 모두 명시하지 않는다면
transform은 연산 가능한 컬럼만 알아서 필터링 된다.
1을 뺄 수 없는
성별 컬럼은 알아서 결과에 나오지 않고, 에러도 발생하지 않는다.
apply는 어떨까?
apply는 컬럼을 명시하지 않으면 에러가 발생한다.
알아서 연산 불가능한 컬럼을 필터링해주지 않는 것이다.
[차이3]
transform - 기존 인덱스 유지
apply - 그룹별 출력
차이 3을 보기 위해 새 데이터를 만들어보자
그룹별, 컬럼별 평균값이 누락값으로 잘 채워졌다.
여기서 중요한 것은 기존 데이터프레임의 인덱스를 유지한다는 것이다.
apply는 어떨까?
그룹별 누락값을 잘 채웠으나
transform과 다른 것은 그룹별 멀티인덱스로 출력되는 것이다.
(멀티인덱스 데이터프레임)
물론 모두 숫자로 되어있기 때문에 차이2를 무시하고
진행될 수 있었다.
데이터 분석을 위해선 이러한 차이를 반드시 알아야하는 것은 아니다.
다만 적재적소에 메서드를 구별해서
필요한 내용을 전처리하거나
구별해서 활용할 줄 알아야할 것이다.
'Pandas > 응용' 카테고리의 다른 글
판다스 - groupby 메서드들의 활용 방안 (0) | 2020.06.23 |
---|---|
판다스 - groupby : apply와 agg의 차이 (0) | 2020.06.23 |
판다스 - groupby : transform(응용) (0) | 2020.06.23 |
판다스 - groupby : transform (0) | 2020.06.23 |
판다스 - groupby : apply (0) | 2020.06.23 |