[Day9] Pandas II/ 확률론

 

 

중요

apply vs transform

간단하게 applytransform의 차이에 대해서 보려고 한다.

df = pd.DataFrame({'A': [1,2,3], 'B': [10,20,30] })
df
#	A	B
#0	1	10
#1	2	20
#2	3	30

 

기본적인 함수를 사용하면 같은 결과를 얻을 수 있다.

df.apply(lambda x: x+10)
#	A	B
#0	11	20
#1	12	30
#2	13	40

df.transform(lambda x: x+10)
#	A	B
#0	11	20
#1	12	30
#2	13	40

 

먼저 transform()은 문자열 함수, 함수의 리스트, dict형도 다 지원한다. 하지만 apply()는 오직 함수만 허용한다.

df.transform('sqrt')
#   A	        B
#0	1.000000	3.162278
#1	1.414214	4.472136
#2	1.732051	5.477226

df.transform([lambda x:x+10,lambda x:x+20])
#	A	                    B
#   <lambda> <lambda>	<lambda> <lambda>
#0	11	     21	        20	     30
#1	12	     22	        30	     40
#2	13	     23	        40	     50

df.transform({'A': np.sqrt,'B': np.exp})
#	A	        B
#0	1.000000	2.202647e+04
#1	1.414214	4.851652e+08
#2	1.732051	1.068647e+13

 

여기서 가장 큰 차이점은 transform()은 집계된 결과를 만들 수 없다. 이건 먼저 transform()의 경우는 입력값으로 들어로 DataFrame의 shape이 바뀌면 안된다. 따라서 집계된 결과를 만들게 되면 원래의 shape이 망가지기때문에 ValueError가 발생하게 된다.

df.apply(lambda x:x.sum())
#A     6
#B    60
#dtype: int64

df.transform(lambda x:x.sum())
# ValueError발생

 

마지막으로 차이점은 groupby()와 함께 쓰일때 이다.

df = pd.DataFrame({
    'key': ['a','b','c'] * 2,
    'A': np.arange(6),
    'B': [1,2,3] * 2})
df
#	key	A	B
#0	a	0	1
#1	b	1	2
#2	c	2	3
#3	a	3	1
#4	b	4	2
#5	c	5	3

 

df.groupby('key').apply(np.sum)
#	key	A	B
#key			
#a	aa	3	2
#b	bb	5	4
#c	cc	7	6

df.groupby('key').transform(np.sum)
#	A	B
#0	3	2
#1	5	4
#2	7	6
#3	3	2
#4	5	4
#5	7	6

apply()의 경우 그룹으로 집계된 값을 한 행으로 내보내지만, transform()의 경우 입력으로 들어간 DataFrame과 같은 shape으로 내보내기 때문에 집계된 값이 각 그룹별로 동일하게 적용되어 출력된 것을 확인 할 수 있다.

 

 

피어세션

 

내일 발표 주제 소개

  1. 죠르디

    • 딥러닝 학습방법 코딩한것 시연
  2. 라이언

    • 파이썬 자동화 프로그램 소개 (셀레니움)

'AI > 부스트 캠프 AI tech' 카테고리의 다른 글

[Day13] CNN  (0) 2021.02.03
[Day12] 최적화  (0) 2021.02.02
[Day11] 딥러닝 기초  (0) 2021.02.01
[Day10] 시각화/통계학  (0) 2021.01.29
[Day8] Pandas I,딥러닝 학습방법 이해하기  (0) 2021.01.27
[Day7] 경사하강법  (0) 2021.01.26
[Day6] Numpy/벡터/행렬  (0) 2021.01.25
[Day 5] 파이썬으로 데이터 다루기  (0) 2021.01.22

+ Recent posts