Pivot tables

การจัดรูปแบบข้อมูลด้วย 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

  • ใช้สำหรับ pivoting ทั่วไป
  • คู่ index/column ต้องไม่ซ้ำกัน
  • ไม่สามารถ aggregate ค่าได้
การจัดรูปแบบข้อมูลด้วย pandas

Pivot table

  • DataFrame ที่แสดงสถิติสรุปจาก DataFrame ขนาดใหญ่

 

DataFrame ที่แสดงสถิติสรุป

การจัดรูปแบบข้อมูลด้วย pandas

Pivot table

DataFrame ในรูปแบบ long format

การจัดรูปแบบข้อมูลด้วย pandas

Pivot table

ลูกศรชี้จาก long format ไปยัง wide format พร้อมสถิติสรุป

 

คำสั่ง pivot table

การจัดรูปแบบข้อมูลด้วย pandas

Pivot table

DataFrame แบบ long และแบบสรุป พร้อม highlight คอลัมน์และ index

 

คำสั่ง pivot พร้อม argument index และ columns

การจัดรูปแบบข้อมูลด้วย pandas

Pivot table

DataFrame แบบ long และแบบสรุป พร้อม highlight คอลัมน์และค่า

 

คำสั่ง pivot พร้อม argument values และฟังก์ชัน aggregate

การจัดรูปแบบข้อมูลด้วย pandas

Pivot table

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

Index แบบลำดับชั้น

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

Index แบบลำดับชั้น

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

Index แบบลำดับชั้น

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

Index แบบลำดับชั้น

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 มีค่ามากกว่าหนึ่งค่าสำหรับแต่ละคู่ index/column หรือไม่?

ต้องการให้ DataFrame ที่ได้มี multi-index หรือไม่?

ต้องการสถิติสรุปจาก DataFrame ขนาดใหญ่หรือไม่?

ใช่! ใช้ .pivot_table()

การจัดรูปแบบข้อมูลด้วย pandas

มาฝึกกันเถอะ!

การจัดรูปแบบข้อมูลด้วย pandas

Preparing Video For Download...