สมมติว่าคุณมี DataFrame และต้องการคำนวณ covariance matrix ของข้อมูลที่จัดกลุ่มแล้ว (grouped) และ covariance ระหว่างสองคอลัมน์เฉพาะในแต่ละกลุ่ม
วิธีแก้ปัญหา
- สร้าง DataFrame ที่มีคอลัมน์ subjects, mark1, mark2
- ใช้
df.groupby('subjects').cov()คำนวณ covariance matrix ต่อกลุ่ม - ใช้
df.groupby('subjects').apply(lambda x: x['mark1'].cov(x['mark2']))คำนวณ covariance ระหว่าง mark1 และ mark2 ต่อกลุ่ม
ตัวอย่างโค้ด
import pandas as pd
df = pd.DataFrame({'subjects': ['maths', 'maths', 'maths', 'science', 'science', 'science'],
'mark1': [80, 90, 85, 95, 93, 85],
'mark2': [85, 90, 70, 75, 95, 65]})
print("DataFrame ต้นฉบับ:\n", df)
# Covariance matrix ต่อกลุ่ม
group_cov = df.groupby('subjects').cov()
print("\nCovariance matrix ต่อกลุ่ม:")
print(group_cov)
# Covariance ระหว่าง mark1 และ mark2 ต่อกลุ่ม
pair_cov = df.groupby('subjects').apply(lambda x: x['mark1'].cov(x['mark2']))
print("\nCovariance ระหว่าง mark1 และ mark2 ต่อกลุ่ม:")
print(pair_cov)
ผลลัพธ์
DataFrame ต้นฉบับ:
subjects mark1 mark2
0 maths 80 85
1 maths 90 90
2 maths 85 70
3 science 95 75
4 science 93 95
5 science 85 65
Covariance matrix ต่อกลุ่ม:
mark1 mark2
subjects
maths mark1 25.000000 12.500000
mark2 12.500000 108.333333
science mark1 28.000000 50.000000
mark2 50.000000 233.333333
Covariance ระหว่าง mark1 และ mark2 ต่อกลุ่ม:
subjects
maths 12.5
science 50.0
dtype: float64
คำอธิบาย:
groupby().cov()คืนค่า covariance matrix ขนาด 2x2 ต่อกลุ่ม (mark1-mark1, mark1-mark2, mark2-mark1, mark2-mark2)apply(lambda x: x['mark1'].cov(x['mark2']))คำนวณ covariance ระหว่างสองคอลัมน์เฉพาะ ต่อกลุ่ม- Covariance บวก = แนวโน้มเคลื่อนที่ไปในทิศทางเดียวกัน, ลบ = ทิศทางตรงข้าม