Python : Reformat Pandas Dataframe ‘Long to Wide’

Reformat Data 'Long to Wide' pada Python Pandas Dataframe

Saat akan mengolah data, seringkali perlu merubah format dari data yang ada. Perubahan format (reformat/reshape) dapat berupa long menjadi wide maupun sebaliknya dari wide menjadi long. Merubah format long menjadi wide umumnya digunakan ketika kita memiliki raw data dan ingin membuat tabulasi dari data tersebut. Hal ini mirip seperti membuat tabulasi menggunakan Pivot Table pada Microsoft Excel. Sementara itu reformat data dari wide menjadi long sering kali diperlukan ketika mengambil data dalam bentuk tabel (misalkan dari website tertentu), untuk kebutuhan pengolahan lebih lanjut.

Pada tutorial ini kita akan membahas mengenai reformat/reshape dataframe pandas dari format long menjadi format wide. Untuk tutorial reformat dataframe dari wide menjadi long, lihat di sini.

Reformat/Reshape data Long to Wide

Merubah format dataframe dari long menjadi wide pada pandas dataframe dapat dilakukan menggunakan method pivot. Secara umum bentuknya adalah sebagai berikut:

Python

df = pd.pivot(df, index='index', columns='newcols', values='val')

Pada contoh tersebut, index menyatakan kolom yang dijadikan sebagai identitas. Selanjutnya, parameter columns yaitu newcols adalah kolom yang akan kita ubah menjadi kolom-kolom baru. Parameter values yaitu val menunjukkan kolom yang isiannya akan menjadi nilai bagi kolom-kolom baru tersebut.

Ilustrasi

Misalkan terdapat data pertumbuhan ekonomi dari tahun 2019-2021 untuk 4 provinsi A, B, C, dan D dalam format long. Data tersebut akan kita reformat menjadi data wide seperti gambar berikut ini:

Reformat/Reshape Format Long to Wide
Reformat/Reshape Format Long to Wide

Melakukan reformat seperti di atas dapat menggunakan sintaks berikut ini:

Python

import pandas as pd

# Membuat contoh dataframe dalam format long
df_long = pd.DataFrame({
    'Provinsi' : ["A", "A", "A", "B", "B", "B", 
                  "C", "C", "C", "D", "D", "D"], 
    'Tahun' : ["2019", "2020", "2021", "2019", "2020", "2021", 
               "2019", "2020", "2021",  "2019", "2020", "2021"], 
    'Growth' : [3.6, 5.1, 4.7, 2.8, 4.4, 3.9, 
                6.1, 4.8, 4.2, 2.9, 4.7, 3.4]
})

# Menampilkan df_long
print(df_long)


# Reformat df_long menjadi wide
df_wide = pd.pivot(df_long, index='Provinsi', 
                   columns='Tahun', values='Growth')

# Menampilkan df_wide
print(df_wide)

Output

# Output df_long
  Provinsi Tahun Growth
0	 A	2019	3.6
1	 A	2020	5.1
2	 A	2021	4.7
3	 B	2019	2.8
4	 B	2020	4.4
5	 B	2021	3.9
6	 C	2019	6.1
7	 C	2020	4.8
8	 C	2021	4.2
9	 D	2019	2.9
10	D	2020	4.7
11	D	2021	3.4


# Output df_wide
Tahun  2019	  2020	  2021
Provinsi			
A	   3.6	   5.1	   4.7
B	   2.8	   4.4	   3.9
C	   6.1	   4.8	   4.2
D	   2.9	   4.7	   3.4

Pada contoh ini kita menggunakan kolom Provinsi sebagai identitas. Kolom Tahun yang sebelumnya berisi nilai 2019, 2020 dan 2021 kita reformat menjadi kolom-kolom yang terpisah dimana setiap kolom tersebut akan berisi nilai dari kolom Growth untuk baris dan kolom yang bersesuaian.

Dengan cara yang serupa kita dapat membuat format wide dimana kolom Tahun menjadi identitas dan kolom Provinsi yang akan kita jadikan kolom-kolom baru.

Python

# Reformat df_long menjadi wide
df_wide = pd.pivot(df_long, index='Tahun', 
                   columns='Provinsi', values='Growth')

# Menampilkan df_wide
print(df_wide)

Output

# Output df_wide
Provinsi  A	  B	   C	   D
Tahun				
2019	  3.6	2.8	6.1	2.9
2020	  5.1	4.4	4.8	4.7
2021	  4.7	3.9	4.2	3.4

Kita dapat melakukan reformat dengan menggunakan lebih dari satu kolom. Misalkan dari data yang ada, selain memiliki kolom Tahun, juga memiliki kolom Semester. Selanjutnya ingin membuat format data menjadi wide dimana pada sisi kolom terdapat data untuk setiap tahun serta dibagi lagi berdasarkan kolom semester.

Reformat/Reshape Format Long to Wide
Reformat/Reshape Format Long to Wide

Untuk menghasilkan format seperti pada gambar di atas, berikut ini contoh sintaks yang dapat digunakan.

Python

# Membuat contoh dataframe dalam format long
df_long = pd.DataFrame({
    'Provinsi' : ["A", "A", "A", "A", "A", "A", 
                  "B", "B", "B", "B", "B", "B", 
                  "C", "C", "C", "C", "C", "C" ], 
    'Tahun' : ["2019", "2019", "2020", "2020", "2021", "2021", 
               "2019", "2019", "2020", "2020", "2021", "2021", 
               "2019", "2019", "2020", "2020", "2021", "2021" ], 
    'Semester' : [1, 2, 1, 2, 1, 2, 
                  1, 2, 1, 2, 1, 2, 
                  1, 2, 1, 2, 1, 2],
    'Growth' : [3.1, 4.1, 4.3, 2.7, 4.5, 3.4, 
                4.7, 2.4, 4.4, 3.9, 3.2, 5.4, 
                3.7, 3.9, 4.5, 3.8, 4.1, 2.3]
})


# Reformat df_long menjadi wide
df_wide = pd.pivot(df_long, index='Provinsi', 
                   columns=['Tahun', 'Semester'], values='Growth')

Informasi lainnya yang berkaitan dengan method pivot dapat dilihat melalui dokumentasi pandas di sini.

Selain merubah format data dari long menjadi wide, kita dapat pula melakukan sebaliknya. Misalkan kita memiliki data dalam format wide dan akan dirubah menjadi long.

Tulisan Lainnya

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi