# 코드잇 데이터 사이언티스트 강의 듣는 중
<피벗 테이블>
- .pivot_table()
- groupby랑 유사하게 같은 그룹끼리 묶어서 값 비교 가능
- 피봇은 좀 더 깔끔하게 생긴 표 형태로 데이터를 요약 가능,
- but, 인덱스나 칼럼에 들어가는 값들이 너무 많은 경우엔 그룹바이보다 가독성이 떨어짐.
- 피봇보다 그룹바이의 계산 속도가 더 빠르기 때문에 데이터가 엄청 클 경우에는 그룹바이가 더 나음.
--> 둘 중에 상황에 따라 쓰면 될 듯.
- 넷플릭스 컨텐츠의 연도와 장르에 따른 점수의 평균을 보고자 할 때,
- groupby는 행에 연도와 장르를 넣음.
netflix_df.groupby(['year', 'genre'])['score'].mean()
#값
year genre
2019 Comedy 5.625000
Documentary 6.920000
Drama 6.335714
Romantic comedy 5.871429
Thriller 5.842857
2020 Comedy 5.571429
Documentary 7.177778
Drama 6.055556
Romantic comedy 5.687500
Thriller 5.666667
2021 Comedy 5.228571
Documentary 6.378571
Drama 6.533333
Romantic comedy 5.600000
Thriller 5.566667
Name: score, dtype: float64
- 반면, pivot_table은 인덱스와 칼럼을 지정해서 둘 다 사용함.
pd.pivot_table(netflix_df, values='score', index='year', columns='genre')
--> pandas에서 피벗 테이블은 기본적으로 평균값을 계산해줌.
--> 인덱스와 칼럼을 모두 사용.
--> 파라미터를 다양하게 사용, values='', index='', columns=''
- 평균 말고 다른 것을 확인하고 싶으면 aggfunc = '' 사용하면 됨.
pd.pivot_table(netflix_df, values='score', index='year', columns='genre', aggfunc='max')
--> 파라미터에 각각 리스트를 넣을 수 있음.
++ 근데 리스트를 넣어보니깐,
가독성이 너무 떨어짐..
확인할 것이 많아지면, groupby가 실제로 더 깔끔한듯.
pd.pivot_table(netflix_df, values=['score', 'runtime'], index='year', columns='genre', aggfunc='max')
--> .. 그냥 groupby를 쓸 듯.
<예제>
- ... 너무 복잡하게 생각했음...
- count()나 count_values()로 계속 해보려고 했는데 끝까지 안됨....
- 머리 빠개지다가 aggfunc도 검색해보고, count로도 바꿔봤으나 안됨.
-.....size를 안 알려주니...........ㅡ ㅡ 아니.. 강의 들은 내용으로 해보려고 했는데 될리가 있나.
- 심지어 pd.를 쓸 때는 values가 필수라는 글도 봤는데, 해답 보니깐 그렇지도 않음..... 제대로 정리된 게 없어..
import pandas as pd
olympic_df = pd.read_csv('data/olympic.csv')
pd.pivot_table(olympic_df, index='team', columns='medal',
aggfunc='size').fillna(0).sort_values(by='1st', ascending=False)
- 심지어 .fillna(0)가 아니라 파라미터로 fill_value=0으로 넣으면 채점이 안됨..
- 값이 같아도 채점이 안 됨..
- aggfunc = 'size' --> 계산이 아니라 단순하게 로우 개수를 세는 것.
- 시간 낭비 생각하면 .......찐으로 빡치네. ㅎ ^^