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

เขียนโปรแกรม Python คำนวณ EWM แบบปรับแล้วและไม่ปรับใน DataFrame

สมมติว่าคุณมี DataFrame และต้องการคำนวณ Exponential Weighted Moving Average (EWM) แบบปรับแล้ว (adjusted) และไม่ปรับ (non-adjusted)

วิธีแก้ปัญหา

  1. สร้าง DataFrame
  2. คำนวณ adjusted EWM ด้วย df.ewm(com=0.5).mean()
  3. คำนวณ 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 ที่ควบคุมอัตราการลดลงของน้ำหนัก