자신에게 친절할 것 :)

카테고리 없음

[데이터 전처리] 피벗 테이블 .pivot_table()

Tashapark 2024. 6. 26. 17:39
728x90

# 코드잇 데이터 사이언티스트 강의 듣는 중


<피벗 테이블>

- .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' --> 계산이 아니라 단순하게 로우 개수를 세는 것. 

- 시간 낭비 생각하면 .......찐으로 빡치네. ㅎ ^^

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형