[Day9] Pandas II/ 확률론
Pandas II
확률론 맛보기
중요
apply vs transform
간단하게 apply
와 transform
의 차이에 대해서 보려고 한다.
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으로 내보내기 때문에 집계된 값이 각 그룹별로 동일하게 적용되어 출력된 것을 확인 할 수 있다.
피어세션
주변확률분포와 조건부확률분포에 대해서 토론을 진행함
몬테카를로 샘플링 예제 토론(원주율 구하기)
내일 발표 주제 소개
죠르디
- 딥러닝 학습방법 코딩한것 시연
라이언
- 파이썬 자동화 프로그램 소개 (셀레니움)
'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 |