การสร้างคอลัมน์ใหม่ (New Column) ใน DataFrame โดยคำนวณจากคอลัมน์ที่มีอยู่แล้ว เป็นการดำเนินการพื้นฐานที่ใช้บ่อยที่สุดใน Feature Engineering และ Data Transformation
ขั้นตอนการทำงาน
1. โหลดข้อมูล
import pandas as pd
dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\SalesRecords.csv")
2. สร้างคอลัมน์ใหม่จากคอลัมน์เดิม
# เพิ่ม 100 เข้าไปใน Reg_Price สร้างคอลัมน์ New_Reg_Price
dataFrame['New_Reg_Price'] = (dataFrame['Reg_Price'] + 100)
โค้ดตัวอย่างสมบูรณ์
import pandas as pd
dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\SalesRecords.csv")
print("DataFrame:\n", dataFrame)
print("\nRows, Cols:", dataFrame.shape)
# สร้างคอลัมน์ใหม่: เพิ่ม 100 จาก Reg_Price
dataFrame['New_Reg_Price'] = (dataFrame['Reg_Price'] + 100)
print("\nUpdated DataFrame with new column:\n", dataFrame)
print("\n[Updated] Rows, Cols:", dataFrame.shape)
ผลลัพธ์
DataFrame:
Car Date_of_Purchase Reg_Price
0 BMW 10/10/2020 1000
1 Lexus 10/12/2020 750
2 Audi 10/17/2020 750
3 Jaguar 10/16/2020 1500
4 Mustang 10/19/2020 1100
5 Lamborghini 10/22/2020 1000
Rows, Cols: (6, 3)
Updated DataFrame with new column:
Car Date_of_Purchase Reg_Price New_Reg_Price
0 BMW 10/10/2020 1000 1100
1 Lexus 10/12/2020 750 850
2 Audi 10/17/2020 750 850
3 Jaguar 10/16/2020 1500 1600
4 Mustang 10/19/2020 1100 1200
5 Lamborghini 10/22/2020 1000 1100
[Updated] Rows, Cols: (6, 4)
รูปแบบการสร้างคอลัมน์ใหม่ที่นิยม
| วิธี | ตัวอย่าง | คำอธิบาย |
|---|---|---|
| Arithmetic | df['new'] = df['a'] + df['b'] | คำนวณจากคอลัมน์อื่น |
| Constant | df['new'] = 100 | ค่าคงที่ทุกแถว |
| Function | df['new'] = df['col'].apply(func) | ใช้ฟังก์ชัน custom |
| Vectorized | df['new'] = np.where(df['a']>0, 'pos', 'neg') | เงื่อนไขแบบเวกเตอร์ (เร็ว) |
| Assign | df = df.assign(new=df['a']*2) | Return DataFrame ใหม่ (chainable) |
ตัวอย่างขั้นสูง
# 1. ใช้ np.where (vectorized if-else)
import numpy as np
df['Price_Category'] = np.where(df['Reg_Price'] > 1000, 'High', 'Low')
# 2. ใช้ apply กับ lambda
df['Price_Doubled'] = df['Reg_Price'].apply(lambda x: x * 2)
# 3. ใช้ assign ช่วย chain
df = (df
.assign(Reg_Price_Plus_100 = lambda x: x['Reg_Price'] + 100)
.assign(Price_Category = lambda x: np.where(x['Reg_Price'] > 1000, 'High', 'Low'))
)
# 4. สร้างหลายคอลัมน์พร้อมกัน
df[['col1', 'col2']] = df[['a', 'b']] * 2
⚠️ SettingWithCopyWarning
ถ้าได้ warning: A value is trying to be set on a copy of a slice from a DataFrame
- ใช้
.copy()ตอน slice:df = df_original[condition].copy() - หรือใช้
.loc[]เพื่อ assignment ที่ชัดเจน