บทความนี้สาธิตวิธีจัดกลุ่มข้อมูลใน Pandas DataFrame ตามช่วงเวลาวัน (Time-based Grouping) โดยใช้ pd.Grouper ร่วมกับ groupby()
โค้ดตัวอย่าง
import pandas as pd
# สร้าง DataFrame พร้อม Timestamp
dataFrame = pd.DataFrame({
"Car": ["Audi", "Lexus", "Tesla", "Mercedes", "BMW", "Toyota", "Nissan", "Bentley", "Mustang"],
"Date_of_Purchase": [
pd.Timestamp("2021-06-10"),
pd.Timestamp("2021-07-11"),
pd.Timestamp("2021-06-25"),
pd.Timestamp("2021-06-29"),
pd.Timestamp("2021-03-20"),
pd.Timestamp("2021-01-22"),
pd.Timestamp("2021-01-06"),
pd.Timestamp("2021-01-04"),
pd.Timestamp("2021-05-09")
],
"Reg_Price": [1000, 1400, 1100, 900, 1700, 1800, 1300, 1150, 1350]
})
print("DataFrame ต้นฉบับ:")
print(dataFrame)
# จัดกลุ่มทุก 7 วัน (7D = 7 Days)
# key: คอลัมน์วันที่, freq: ความถี่, axis=0: จัดกลุ่มตามแถว
grouped = dataFrame.groupby(pd.Grouper(key='Date_of_Purchase', axis=0, freq='7D')).sum()
print("\nGroup DataFrame by 7 days (Sum of Reg_Price):")
print(grouped)
ผลลัพธ์
Group DataFrame by 7 days...
Reg_Price
Date_of_Purchase
2021-01-04 2450.0
2021-01-11 NaN
2021-01-18 1800.0
2021-01-25 NaN
2021-02-01 NaN
...
2021-06-07 1000.0
2021-06-14 NaN
2021-06-21 1100.0
2021-06-28 900.0
2021-07-05 1400.0
อธิบาย Frequency Strings
| Code | ความหมาย | ตัวอย่าง |
|---|---|---|
D | วัน (Day) | '1D', '7D', '14D' |
W | สัปดาห์ (Week) | 'W', '2W' |
M | สิ้นเดือน (Month End) | 'M', '3M' |
MS | ต้นเดือน (Month Start) | 'MS' |
Q | ไตรมาส (Quarter) | 'Q', 'Q-JAN' |
Y | สิ้นปี (Year End) | 'Y', 'A' |
H | ชั่วโมง (Hour) | 'H', '6H' |
T / min | นาที (Minute) | '30T', '15min' |
การจัดการ NaN (ช่วงที่ไม่มีข้อมูล)
# เติม 0 แทน NaN
grouped_filled = grouped.fillna(0).astype({'Reg_Price': 'int64'})
# หรือลบช่วงที่ไม่มีข้อมูล
grouped_dropped = grouped.dropna()
การประยุกต์ใช้
- ยอดขายรายสัปดาห์/รายเดือน (Sales Reporting)
- IoT Sensor Data: Resample ข้อมูลความถี่สูงเป็นช่วงต่ำกว่า
- Financial: OHLC Resampling
- Log Analysis: นับ Events ต่อช่วงเวลา