[Python] Pandas 그룹 함수 적용 메서드 (map, apply, applymap)

Pandas
: 그룹 별로 간단한 함수를 정의할 수 있는 방법
for문 iteration을 돌지 않고도 시간을 절약하여 한꺼번에 함수를 적용시킬 수 있도록 도와준다
map
data.map( func , **iterable )
pandas Series 객체에만 적용할 수 있는 메서드
한 개 변수에 대한 값을 매핑하여 일괄적으로 변환하고자 할때 사용
인덱스가 잘 맞춰져 있다면 값 전환을 할 수가 있다.
수학의 합성함수와 유사하다.
s = pd.Series(['cat', 'dog', np.nan, 'rabbit'])
0 cat
1 dog
2 NaN
3 rabbit
dtype: object
s.map('I am a {}'.format)
0 I am a cat
1 I am a dog
2 I am a nan
3 I am a rabbit
dtype: object
apply
Series나 DataFrame의 지정된 축을 따라 함수를 적용하는 데 사용.
column을 추가할 때 lambda에 적당한 함수를 넣어서 값을 계산할 수 있다.
한 번에 전체 행 또는 열에 대해 작동한다.
벡터화할 수 없는 함수 를 적용 apply() 할 때 주로 사용된다.
row, column이 존재하기 때문에 축을 잘 설정해야 한다.
예를 들어 각 column의 합계를 구하고 싶을때는 axis=0로 하면 되고 row의 합계는 axis=1로 지정해준다.
import numpy as np
df = pd.DataFrame(np.arange(12).reshape(4,3),columns=['a','b','c'])
a b c
0 1 2 3
1 4 5 6
2 7 8 9
3 2 4 6
#column 별 합계를 구하는 lambda식
df.apply(lambda x:x.sum())
a 14
b 22
c 24
dtype: int64
#row별 합계를 구하는 lambda식
df.apply(lambda x:x.sum(),axis=1)
0 6
1 15
2 24
3 12
dtype: int64
- lambda 식을 사용하여 새로운 칼럼을 생성할 수도 있다 !
applymap
Pandas DataFrame 객체에만 적용할 수 있는 메서드
applymap은 apply와 형식은 비슷하지만 접근하는 개체가 개별적이다.
지정된 기능(lambda)을 각 요소 별로 적용할 수 있다.
lambda에서 if 와 같이 조건을 넣을 수 있지만 applymap은 각 원소를 기준으로 데이터를 변환한다.
여러 행이나 열의 값에 접근하여 개별적으로 변환할 때 사용된다 .
df = pd.DataFrame(np.arange(12).reshape(4,3),columns=['a','b','c'])
a b c
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
df.applymap(lambda x:'%.2f'% x)
a b c
0 0.00 1.00 2.00
1 3.00 4.00 5.00
2 6.00 7.00 8.00
3 9.00 10.00 11.00
apply와 applymap의 차이
if ~ else 구문을 넣어보면 조금 더 명확하게 apply와 applymap의 차이에 대해 알 수있다.
df.applymap(lambda x : '%.2f'% x if (x >= 10) else 0)
a b c
0 0 0 0
1 0 0 0
2 0 0 0
3 0 10.00 11.00
- apply의 경우 조건문을 넣어주니 오류가 뜬다.
- 이 경우 특정 칼럼에 대해 처리해주도록 코드를 바꿔주면 실행이 된다 !
df.apply(lambda x : '%.2f'% x if (x >= 10) else 0)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
df['c'].apply(lambda x : '%.2f'% x if (x >= 10) else 0)
0 0
1 0
2 0
3 11.00
Name: c, dtype: object
Reference
파이썬 판다스 데이터프레임 apply함수 사용 - 특정 조건(if)의 값 바꾸기!
데이터 프레임을 가공하다 보면, 특정 조건에 맞는 값을 변경해야 될 경우가 있습니다. 이를 처리할 수 있는 방법은 여러 가지입니다. 하지만 그중에서도 코드를 깔끔하게 작성하고, 직관적으로
tariat.tistory.com
apply() vs map() vs applymap() in Pandas
Discussing the difference between apply(), map() and applymap() in Python and Pandas
towardsdatascience.com
[Pandas] 함수 적용하기(map,apply, applymap)
판다스 내에서 함수처리 하는 방법입니다. 파이썬으로 할 수 있지만 판다스 메쏘드로 간단한 함수를 정의할 수 있다는 게 큰 장점이고 메모리 절약도 할 수 있습니다. map, apply, applymap 세가지 메
seong6496.tistory.com
pandas.Series.map — pandas 1.5.0 documentation
If ‘ignore’, propagate NaN values, without passing them to the mapping correspondence.
pandas.pydata.org