피벗 테이블

pandas로 데이터 재구조화하기

Maria Eugenia Inzaugarat

Data Scientist

Pivot 메서드의 한계

another_fifa.head()
                 name    variable  metric_system  imperial_system
0   Cristiano Ronaldo      weight             83           183.00
1            J. Oblak      weight             87           191.00
2   Cristiano Ronaldo      height            187             6.13
3     J. Oblak             height            188             6.16
4   Cristiano Ronaldo      height            187             6.14
another_fifa.pivot(index="name", columns="variable")
Traceback (most recent call last):
   ValueError: Index contains duplicate entries, cannot reshape
pandas로 데이터 재구조화하기

Pivot 메서드의 한계

  • 범용 피벗팅
  • 인덱스/열 쌍은 고유해야 함
  • 값을 집계할 수 없음
pandas로 데이터 재구조화하기

피벗 테이블

  • 더 큰 DataFrame을 요약한 통계를 담는 DataFrame

 

요약 통계를 보여주는 DataFrame

pandas로 데이터 재구조화하기

피벗 테이블

긴 형식의 DataFrame

pandas로 데이터 재구조화하기

피벗 테이블

요약 통계와 함께 긴 형식을 넓은 형식으로 변환하는 화살표

 

피벗 테이블 호출

pandas로 데이터 재구조화하기

피벗 테이블

강조된 열과 인덱스가 있는 긴 형식과 요약 DataFrame

 

index와 columns 인자를 사용하는 pivot 호출

pandas로 데이터 재구조화하기

피벗 테이블

강조된 열과 값이 있는 긴 형식과 요약 DataFrame

 

values와 집계 함수 인자를 사용하는 pivot 호출

pandas로 데이터 재구조화하기

피벗 테이블

another_fifa.pivot_table(index="name", columns="variable", aggfunc="mean")
                     metric_system     imperial_system       
         variable   height  weight     height   weight
             name                                                         
Cristiano Ronaldo      187      83      6.135    183.0
         J. Oblak      188      87      6.160    191.0
pandas로 데이터 재구조화하기

계층형 인덱스

fifa_players.head(6)
      first     last   movement   overall  attacking
0    Lionel    Messi   shooting        92         70
1 Cristiano  Ronaldo   shooting        93         89
2    Lionel    Messi    passing        92         92
3 Cristiano  Ronaldo    passing        82         83
4    Lionel    Messi    passing        96         88
5 Cristiano  Ronaldo    passing        89         84
pandas로 데이터 재구조화하기

계층형 인덱스

fifa_players.head(6)
      first     last   movement   overall  attacking
0    Lionel    Messi   shooting        92         70
1 Cristiano  Ronaldo   shooting        93         89
2    Lionel    Messi    passing        92         92
3 Cristiano  Ronaldo    passing        82         83
4    Lionel    Messi    passing        96         88
5 Cristiano  Ronaldo    passing        89         84
fifa_players.pivot_table(index=                 , columns="movement", values=                        , aggfunc=     )
pandas로 데이터 재구조화하기

계층형 인덱스

fifa_players.head(6)
      first     last   movement   overall  attacking
0    Lionel    Messi   shooting        92         70
1 Cristiano  Ronaldo   shooting        93         89
2    Lionel    Messi    passing        92         92
3 Cristiano  Ronaldo    passing        82         83
4    Lionel    Messi    passing        96         88
5 Cristiano  Ronaldo    passing        89         84
fifa_players.pivot_table(index=["first", "last"], columns="movement", values=                        , aggfunc=     )
pandas로 데이터 재구조화하기

계층형 인덱스

fifa_players.head(6)
      first     last   movement   overall  attacking
0    Lionel    Messi   shooting        92         70
1 Cristiano  Ronaldo   shooting        93         89
2    Lionel    Messi    passing        92         92
3 Cristiano  Ronaldo    passing        82         83
4    Lionel    Messi    passing        96         88
5 Cristiano  Ronaldo    passing        89         84
fifa_players.pivot_table(index=["first", "last"], columns="movement", values=["overall", "attacking"], aggfunc="max")
                           attacking           overall
          movement  passing shooting  passing shooting
    first     last                
Cristiano  Ronaldo       84       89       89       93
   Lionel    Messi       92       70       96       92
pandas로 데이터 재구조화하기

마진(Margins)

fifa_players.pivot_table(index=["first", "last"], columns="movement", aggfunc="count",             )
pandas로 데이터 재구조화하기

마진(Margins)

fifa_players.pivot_table(index=["first", "last"], columns="movement", aggfunc="count", margins=True)
                                attacking                  overall
          movement  passing shooting  All    passing shooting  All
    First     Last                
Cristiano  Ronaldo        2        1    3          2        1    3
   Lionel    Messi        2        1    3          2        1    3
      All                 4        2    6          4        2    6
pandas로 데이터 재구조화하기

Pivot 또는 Pivot Table?

 

각 인덱스/열 쌍에 값이 둘 이상 있나요?

결과 피벗 DataFrame에 다중 인덱스가 필요하나요?

큰 DataFrame의 요약 통계가 필요하나요?

그렇다면 .pivot_table()을 사용하세요

pandas로 데이터 재구조화하기

Ayo berlatih!

pandas로 데이터 재구조화하기

Preparing Video For Download...