작업을 하다보면 코드로 매핑해야 되는 케이스가 자주 생긴다.

이럴 때 np.where를 쓸 수도 있지만 케이스가 4~5개 생기는 경우 소스 가독성, 퍼포먼스가 떨어지게 된다.[각주:1]

또 apply를 써서 한 줄 한 줄 dict.get()으로 넣으면 가독성은 좋지만 퍼포먼스가 떨어진다.[각주:2]

이때 가독성도 좋고 퍼포먼스도 좋은 함수가 있었다.

series.map이다.

매핑된 dict를 작성하고 map하면 코드매핑이 된 시리즈를 생성할 수 있다.

test_dict = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
df['colB'] = df['colA'].map(test_dict).fillna('매핑 안 되는 것들 Default value')

 

정리하자면,

1. 단순 dict 조건으로 매핑이 필요하면 series.map을 쓰자

2. 각 row별 함수를 적용해야 하는 경우는 apply를 쓰자

  1. [np.where(df['colA'] == 1, 'a', np.where(df['colA'] == 2, 'b', np.where(df[colA] == 3, .......)))] 무슨 프랙탈 구조처럼 된다. [본문으로]
  2. df['colB'] = df['colA'].apply(lambda x: test_dict.get(x, '기본값')) apply가 자유도는 높지만 퍼포먼스가 그리 좋진 않다. 어쩔 수 없이 row별 함수처리를 해야하거나 퍼포먼스 차이가 크지 않을 때만 사용하자. [본문으로]

'파이썬' 카테고리의 다른 글

파이썬을 인터프리터 언어라고 하지 말자  (0) 2023.08.18
주차별 특정 요일 따오기  (0) 2023.05.02
[Python] 날짜 변수명 짓기  (0) 2022.10.19
[Python] 데이터 언패킹  (0) 2022.10.19
파이썬 프로젝트 진행  (0) 2022.09.06

+ Recent posts