Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

เขียนโปรแกรม Python เปลี่ยนรูปทรง DataFrame ด้วย melt, stack, unstack, pivot

สามารถเปลี่ยนรูปทรง (reshape) DataFrame ได้หลายวิธี ได้แก่ melt(), stack(), unstack(), และ pivot()

วิธีที่ 1: ใช้ melt() - แปลงจาก wide เป็น long format

  1. สร้าง DataFrame
  2. ใช้ df.melt() แปลงคอลัมน์เป็นแถว

ตัวอย่าง

import pandas as pd

df = pd.DataFrame({'Id': [1, 2, 3], 'Age': [13, 14, 13], 'Mark': [80, 90, 85]})
print("DataFrame ต้นฉบับ:\n", df)
print("\nหลัง melt():")
print(df.melt())

ผลลัพธ์

DataFrame ต้นฉบับ:
   Id  Age  Mark
0   1   13    80
1   2   14    90
2   3   13    85

หลัง melt():
  variable  value
0       Id      1
1       Id      2
2       Id      3
3      Age     13
4      Age     14
5      Age     13
6     Mark     80
7     Mark     90
8     Mark     85

วิธีที่ 2: ใช้ stack() และ unstack() - เปลี่ยนระดับของ index

  1. ใช้ df.stack() เพิ่มระดับ index (wide -> long)
  2. ใช้ df.unstack() ลดระดับ index (long -> wide)

ตัวอย่าง

import pandas as pd

df = pd.DataFrame({'Id': [1, 2, 3], 'Age': [13, 14, 13], 'Mark': [80, 90, 85]})
print("DataFrame ต้นฉบับ:\n", df)
print("\nหลัง stack():")
print(df.stack().to_frame())
print("\nหลัง unstack():")
print(df.unstack().to_frame())

ผลลัพธ์

หลัง stack():
            0
0 Id        1
  Age      13
  Mark     80
1 Id        2
  Age      14
  Mark     90
2 Id        3
  Age      13
  Mark     85

หลัง unstack():
       0  1  2
Id  0   1  2  3
Age 0  13 14 13
Mark 0  80 90 85

วิธีที่ 3: ใช้ pivot() - สร้างตารางสรุปจากคอลัมน์

  1. ใช้ df.pivot(columns='Id') เปลี่ยนรูปทรงตามคอลัมน์ Id

ตัวอย่าง

import pandas as pd

df = pd.DataFrame({'Id': [1, 2, 3], 'Age': [13, 14, 13], 'Mark': [80, 90, 85]})
print("DataFrame ต้นฉบับ:\n", df)
print("\nหลัง pivot(columns='Id'):")
print(df.pivot(columns='Id'))

ผลลัพธ์

หลัง pivot(columns='Id'):
     Age         Mark
Id    1   2   3    1   2   3
0  13.0 NaN NaN  80.0 NaN NaN
1  NaN 14.0 NaN  NaN 90.0 NaN
2  NaN NaN 13.0 NaN NaN 85.0

สรุปการใช้งาน:

  • melt(): Wide -> Long (คอลัมน์กลายเป็นแถว)
  • stack(): คอลัมน์กลายเป็น inner index level
  • unstack(): Index level กลายเป็นคอลัมน์ (กลับของ stack)
  • pivot(): สร้างตาราง pivot จากคอลัมน์ index/columns/values ที่กำหนด