สามารถสร้าง Column ใหม่ใน DataFrame ได้โดยการคำนวณจาก Column เดิม (Arithmetic, Logic, Functions) ผลลัพธ์จะ Align ตาม Index อัตโนมัติ
ตัวอย่างโค้ด
import pandas as pd
import numpy as np
my_data = {
'ab': pd.Series([1, 8, 7], index=['a', 'b', 'c']),
'cd': pd.Series([1, 2, 0, 9], index=['a', 'b', 'c', 'd']),
'ef': pd.Series([56, 78, 32], index=['a', 'b', 'c'])
}
my_df = pd.DataFrame(my_data)
print("The dataframe is:")
print(my_df)
# สร้าง Column 'gh' = 'ab' + 'ef'
my_df['gh'] = my_df['ab'] + my_df['ef']
print("\nAfter adding column 'gh' (ab + ef):")
print(my_df)
ผลลัพธ์
The dataframe is:
ab cd ef
a 1.0 1 56.0
b 8.0 2 78.0
c 7.0 0 32.0
d NaN 9 NaN
After adding column 'gh' (ab + ef):
ab cd ef gh
a 1.0 1 56.0 57.0
b 8.0 2 78.0 86.0
c 7.0 0 32.0 39.0
d NaN 9 NaN NaN
คำอธิบาย
สร้าง DataFrame จาก Dictionary of Series (Index ไม่เท่ากัน ทำให้มี NaN)
my_df['gh'] = my_df['ab'] + my_df['ef']- บวก Column 'ab' และ 'ef' Element-wisePandas Align ตาม Index: Index 'a','b','c' มีค่าครบ → คำนวณได้, Index 'd' ขาด 'ab'/'ef' → NaN
วิธีสร้าง Column ใหม่หลายแบบ
| วิธี | ตัวอย่าง | คำอธิบาย |
|---|---|---|
| Arithmetic | df['new'] = df['A'] + df['B'] | +, -, *, /, **, //, % |
| Function | df['new'] = np.log(df['A']) | NumPy/SciPy UFuncs |
| Apply | df['new'] = df.apply(lambda r: r['A']*r['B'], axis=1) | Row-wise Complex Logic |
| Assign | df = df.assign(new=df['A']+df['B']) | Method Chaining (Immutable) |
| Eval | df.eval('new = A + B') | String Expression (เร็วสำหรับใหญ่) |
| Where/Mask | df['new'] = np.where(df['A']>0, df['B'], 0) | Conditional |
การจัดการ NaN ในการคำนวณ
# Fill NaN ก่อนคำนวณ
my_df['gh'] = my_df['ab'].fillna(0) + my_df['ef'].fillna(0)
# หรือใช้ fill_value ใน Operator
my_df['gh'] = my_df['ab'].add(my_df['ef'], fill_value=0)
หมายเหตุ: NaN + Number = NaN ต้องจัดการ Missing Values ก่อนหรือใช้ fill_value