Bảng pivot

Tái định dạng dữ liệu với pandas

Maria Eugenia Inzaugarat

Data Scientist

Giới hạn của phương thức 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
Tái định dạng dữ liệu với pandas

Giới hạn của phương thức pivot

  • Pivot đa dụng
  • Cặp chỉ mục/cột phải duy nhất
  • Không gộp (aggregate) giá trị
Tái định dạng dữ liệu với pandas

Bảng pivot

  • DataFrame chứa thống kê tóm tắt dữ liệu của một DataFrame lớn hơn

 

DataFrame hiển thị thống kê tóm tắt

Tái định dạng dữ liệu với pandas

Bảng pivot

DataFrame ở định dạng dài

Tái định dạng dữ liệu với pandas

Bảng pivot

Mũi tên từ định dạng dài sang rộng với thống kê tóm tắt

 

Lệnh gọi pivot_table

Tái định dạng dữ liệu với pandas

Bảng pivot

DataFrame dạng dài và tóm tắt với cột và chỉ mục được tô sáng

 

Lệnh pivot với đối số index và columns

Tái định dạng dữ liệu với pandas

Bảng pivot

DataFrame dạng dài và tóm tắt với cột và values được tô sáng

 

Lệnh pivot với đối số values và hàm gộp

Tái định dạng dữ liệu với pandas

Bảng pivot

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
Tái định dạng dữ liệu với pandas

Chỉ mục phân cấp

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
Tái định dạng dữ liệu với pandas

Chỉ mục phân cấp

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=     )
Tái định dạng dữ liệu với pandas

Chỉ mục phân cấp

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=     )
Tái định dạng dữ liệu với pandas

Chỉ mục phân cấp

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
Tái định dạng dữ liệu với pandas

Tổng cộng (margins)

fifa_players.pivot_table(index=["first", "last"], columns="movement", aggfunc="count",             )
Tái định dạng dữ liệu với pandas

Tổng cộng (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
Tái định dạng dữ liệu với pandas

Pivot hay pivot_table?

 

DataFrame có hơn một giá trị cho mỗi cặp chỉ mục/cột không?

Bạn cần multi-index cho DataFrame sau khi pivot không?

Bạn cần thống kê tóm tắt cho DataFrame lớn?

! Hãy dùng .pivot_table()

Tái định dạng dữ liệu với pandas

Ayo berlatih!

Tái định dạng dữ liệu với pandas

Preparing Video For Download...