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

วิธีรวม Pandas DataFrames หลายตัวตามแนวคอลัมน์ (axis=1)

แนวคิด

ฟังก์ชัน pd.concat() ใช้รวม DataFrames หลายตัวเข้าด้วยกัน โดยการกำหนด axis=1 จะทำให้รวมตามแนวคอลัมน์ (side-by-side) ขณะที่ axis=0 (ค่าเริ่มต้น) จะรวมตามแนวแถว (stack vertically)

ข้อควรระวัง

  • หาก DataFrames มีดัชนี (index) ไม่ตรงกัน จะเกิดค่า NaN ในตำแหน่งที่ไม่มีข้อมูลตรงกัน
  • คอลัมน์ที่ชื่อซ้ำกันจะถูกเก็บทั้งหมด (อาจต้องจัดการ rename ก่อนรวม)

ตัวอย่างโค้ด

import pandas as pd

# DataFrame แรก
df1 = pd.DataFrame({
    "Col1": [10, 20, 30],
    "Col2": [40, 50, 60],
    "Col3": [70, 80, 90]
}, index=[0, 1, 2])

# DataFrame ที่สอง
df2 = pd.DataFrame({
    "Col1": [100, 110, 120],
    "Col2": [130, 140, 150],
    "Col3": [160, 170, 180]
}, index=[3, 4, 5])

# DataFrame ที่สาม
df3 = pd.DataFrame({
    "Col1": [200, 210, 220],
    "Col2": [230, 240, 250],
    "Col3": [260, 270, 280]
}, index=[6, 7, 8])

print("DataFrame1:\n", df1)
print("\nDataFrame2:\n", df2)
print("\nDataFrame3:\n", df3)

# รวมตามแนวคอลัมน์
res = pd.concat([df1, df2, df3], axis=1)
print("\nรวม 3 DataFrames (axis=1):\n", res)

ผลลัพธ์

DataFrame1:
   Col1  Col2  Col3
0    10    40    70
1    20    50    80
2    30    60    90

DataFrame2:
   Col1  Col2  Col3
3   100   130   160
4   110   140   170
5   120   150   180

DataFrame3:
   Col1  Col2  Col3
6   200   230   260
7   210   240   270
8   220   250   280

รวม 3 DataFrames (axis=1):
   Col1  Col2  Col3  Col1  Col2  Col3  Col1  Col2  Col3
0  10.0  40.0  70.0   NaN   NaN   NaN   NaN   NaN   NaN
1  20.0  50.0  80.0   NaN   NaN   NaN   NaN   NaN   NaN
2  30.0  60.0  90.0   NaN   NaN   NaN   NaN   NaN   NaN
3   NaN   NaN   NaN  100.0 130.0 160.0   NaN   NaN   NaN
4   NaN   NaN   NaN  110.0 140.0 170.0   NaN   NaN   NaN
5   NaN   NaN   NaN  120.0 150.0 180.0   NaN   NaN   NaN
6   NaN   NaN   NaN   NaN   NaN   NaN  200.0 230.0 260.0
7   NaN   NaN   NaN   NaN   NaN   NaN  210.0 240.0 270.0
8   NaN   NaN   NaN   NaN   NaN   NaN  220.0 250.0 280.0

เคล็ดลับ

  • ใช้ ignore_index=True เพื่อรีเซ็ตดัชนีหลังรวม
  • ใช้ keys เพื่อสร้าง MultiIndex คอลัมน์แยกแยะแหล่งที่มา
  • พิจารณาใช้ join='inner' หากต้องการเฉพาะดัชนีที่ตรงกันทั้งหมด