Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tính hiệp phương sai (covariance) dữ liệu nhóm (groupby) DataFrame Python

Giả sử bạn muốn tính ma trận hiệp phương sai cho từng nhóm (groupby) và hiệp phương sai giữa 2 cột cụ thể trong mỗi nhóm.

Giải pháp

  • Tạo DataFrame có cột nhóm (subjects) và 2 cột số (mark1, mark2).
  • Tính ma trận hiệp phương sai cho từng nhóm: df.groupby('subjects').cov().
  • Tính hiệp phương sai giữa mark1 và mark2 cho từng nhóm: df.groupby('subjects').apply(lambda x: x['mark1'].cov(x['mark2'])).

Mã ví dụ

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)

group_cov = df.groupby('subjects').cov()
print("\nMa trận hiệp phương sai theo nhóm:\n", group_cov)

cov_two_cols = df.groupby('subjects').apply(lambda x: x['mark1'].cov(x['mark2']))
print("\nHiệp phương sai mark1 & mark2 theo nhóm:\n", cov_two_cols)

Kết quả

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

Ma trận hiệp phương sai theo nhóm:
              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

Hiệp phương sai mark1 & mark2 theo nhóm:
subjects
maths     12.5
science   50.0
dtype: float64

Giải thích:

  • .cov() trên GroupBy trả về ma trận hiệp phương sai MultiIndex cho mỗi nhóm.
  • Hiệp phương sai dương (maths=12.5, science=50) cho thấy mark1 và mark2 cùng biến thiên.
  • Science có hiệp phương sai lớn hơn → mối liên hệ mạnh hơn.