สมมติว่าคุณมี DataFrame และต้องการคำนวณ Exponential Weighted Moving Average (EWM) แบบปรับแล้ว (adjusted) และไม่ปรับ (non-adjusted)
วิธีแก้ปัญหา
- สร้าง DataFrame
- คำนวณ adjusted EWM ด้วย
df.ewm(com=0.5).mean() - คำนวณ non-adjusted EWM ด้วย
df.ewm(com=0.5, adjust=False).mean()
ตัวอย่างโค้ด
import numpy as np
import pandas as pd
df = pd.DataFrame({
'Id': [1, 2, 3, np.nan, 5],
'Age': [12, 13, 12, 14, 15]
})
print("DataFrame ต้นฉบับ:")
print(df)
print("\nAdjusted EWM:")
print(df.ewm(com=0.5).mean())
print("\nNon-adjusted EWM:")
print(df.ewm(com=0.5, adjust=False).mean())
ผลลัพธ์
DataFrame ต้นฉบับ:
Id Age
0 1.0 12
1 2.0 13
2 3.0 12
3 NaN 14
4 5.0 15
Adjusted EWM:
Id Age
0 1.000000 12.000000
1 1.750000 12.750000
2 2.615385 12.230769
3 2.615385 13.425000
4 4.670213 14.479339
Non-adjusted EWM:
Id Age
0 1.000000 12.000000
1 1.666667 12.666667
2 2.555556 12.222222
3 2.555556 13.407407
4 4.650794 14.469136
คำอธิบาย:
- Adjusted EWM (adjust=True): ใช้น้ำหนักที่ปรับตามจำนวนข้อมูลสะสม ให้ความสำคัญกับข้อมูลล่าสุดน้อยลงในช่วงแรก
- Non-adjusted EWM (adjust=False): ใช้น้ำหนักแบบ exponential โดยตรง ไม่ปรับตามจำนวนข้อมูล
- พารามิเตอร์
com=0.5คือ center of mass ที่ควบคุมอัตราการลดลงของน้ำหนัก