13. index column 모두 계층적으로 만들 수 있다.
[A A B B ]가 [1 2 1 2] 보다 앞에 선언되었으므로 더 상위 계층으로 본다.
A랑 B같은 경우 숨겨진 상태가 된다.
14. 다중 인덱스 컬럼의 경우 계층적으로 확인한다. loc iloc그대로 사용가능하다.
15. 엑셀의 pivot테이블과 같다. 탐색 조건에 3개가 필요하다.
위의 예시는 그 유명한 타이타닉 데이터다.
16. pivot_table함수를 썼다.
index는 sex를
columns는 class로 두고 값을 데이터 프레임을 구성한다. values값은 0과 1로 이루어졌던 survived이다.
aggfunc는 값을 채우는 함수로 np.mean즉 0 1로 구성된 값들의 평균으로 값을 치우게 된다.
17. 다음 pivot_table을 살펴보자.
위와 같은 월별 내역 데이터 프레임이 있었다. 여기서 index는 월별로
column는 내역으로 설정한다. 내역을 보면 관리비 교통비 월급이 반복된다.
values는 수입과 지출이 된다.
import numpy as np
import pandas as pd
df1 = pd.DataFrame(
np.random.randn(4, 2),
index=[['A', 'A', 'B', 'B'], [1, 2, 1, 2]],
columns=['data1', 'data2']
)
print("DataFrame1")
print(df1, "\n")
df2 = pd.DataFrame(
np.random.randn(4, 4),
columns=[["A", "A", "B", "B"], ["1", "2", "1", "2"]]
)
print("DataFrame2")
print(df2, "\n")
# 명시적 인덱싱을 활용한 df1의 인덱스 출력
print("df1.loc['A', 1]")
print(df1.loc['A', 1], "\n")
# df2의 [A][1] 칼럼 출력
print('df2["A"]["1"]')
print(df2["A"]["1"], "\n")
df1.loc['A', 1]
data1 -0.049049
data2 0.335146
Name: (A, 1), dtype: float64
df2["A"]["1"]
0 -1.827170
1 0.504288
2 -0.172803
3 0.179131
Name: 1, dtype: float64
18. 자 이제 피리부는 사나이 실습을 해봅시다.
피리부는 사나이를 따라간 어린이들 중 남자 어린이와 여자 어린이의 평균 연령을 표로 출력해보려고 합니다.
- 피리부는 사나이 데이터에서 아이들만 골라내는 데 마스킹 연산을,
- 피리부는 사나이를 따라간 아이들의 일차별 연령을 계산하는 데 groupby 함수를,
- 아이들의 일차별 연령을 성별로 나누어 표로 출력하는 데 pivot table을 이용할 수 있습니다
예시
일차 구분 이름 나이 성별
0 1 Rat Stevne 3 Male
1 1 Rat Christopher 3 Male
2 1 Rat Barbare 1 Female
3 1 Rat Marie 1 Female
4 1 Rat Elsapeth 1 Female
5 2 Rat Rynyone 1 Male
6 2 Rat Oswyne 2 Male
결과
import pandas as pd
import numpy as np
def main():
# 파일을 읽어서 코드를 작성해보세요
# 경로: "./data/the_pied_piper_of_hamelin.csv"
df = pd.read_csv("./data/the_pied_piper_of_hamelin.csv")
# print(df)
children = df[df["구분"] == "Child"]
# print(children)
#groupchild = children.groupby("일차")
#print(groupchild)
end = children.pivot_table(
index='일차', columns='성별', values='나이', aggfunc = np.mean
)
print(end)
if __name__ == "__main__":
main()
19. masking부터 애먹다니 ㅋㅋㅋㅋ
구분에서 rat을 제외시키고 싶다면 df[ df["구분"] == "Child"] 로 새로 집어넣어주면 된다.
일차 구분 이름 나이 성별
42 3 Child Fayth 6 Female
43 3 Child Dorthe 13 Female
44 3 Child Rycherde 9 Male
103 4 Child Grace 8 Female
104 4 Child Beil 5 Female
105 4 Child Katherine 11 Female
그러면 앞의 Rat은 제외된 dataframe이 children에 새로 저장된다.
20. 다음으로 groupby일차 하라는데 결과적으론 필요없는 연산이다.
바로 pivot_table로 index / columns / value 값을 설정하면서 가능하다
end = children.pivot_table(
index='일차', columns='성별', values='나이', aggfunc = np.mean
)
print(end)
결과~
성별 Female Male
일차
3 9.500000 9.000000
4 9.000000 6.333333
5 8.666667 8.833333
6 9.411765 7.846154
강의도 동일하게 했다
추가적으로 중복 없이 이름을 뽑아 간 애들 이름 출력하는 것도 있다
'파이썬 > NIPA 데이터분석 강의' 카테고리의 다른 글
NIPA 데이터분석 첫번째 활용선택 : 06 실력확인테스트 (0) | 2020.09.30 |
---|---|
NIPA 데이터분석 첫번째 활용선택 : 05 월드컵 데이터 분석해보기 (1) | 2020.09.30 |
NIPA 데이터분석 첫번째 활용선택 : 04 Matplotlib 2 - with pandas (0) | 2020.09.30 |
NIPA 데이터분석 첫번째 활용선택 : 04 Matplotlib 1 - line plot 옵션과 scatter bar hist (0) | 2020.09.30 |
NIPA 데이터분석 첫번째 활용선택 : 03 Pandas 심화 -a apply group (0) | 2020.09.30 |
NIPA 데이터분석 첫번째 활용선택 : 02 Pandas 기본 알아보기 (0) | 2020.09.29 |
NIPA 데이터분석 첫번째 활용선택 : 01 NumPy와 연산 시작. (0) | 2020.09.29 |
NIPA 데이터분석 첫번째 활용선택 : NumPy 사용해보기 (0) | 2020.09.29 |