Gom Nhóm & Tổng Hợp Dữ Liệu — Kỹ Năng Dùng Nhiều Nhất Khi Phân Tích Thật

Tóm tắt nhanh: GroupBy là kỹ thuật bạn sẽ dùng nhiều nhất trong công việc phân tích dữ liệu thật: chia dữ liệu theo 1 hoặc nhiều nhóm (vùng, tháng, loại khách hàng…), tính toán riêng cho mỗi nhóm, rồi ghép kết quả lại. Bài này giải thích nguyên lý và cách dùng cơ bản.
Kỹ thuật: split-apply-combineĐặt tên bởi Hadley Wickham (R)Dùng nhiều nhất trong công việc thật

Câu hỏi kinh doanh thực tế hiếm khi là “tổng doanh số bao nhiêu” — thường là “tổng doanh số theo TỪNG vùng là bao nhiêu”, “trung bình chi tiêu theo TỪNG loại khách hàng là bao nhiêu”. Đây chính xác là việc groupby được sinh ra để làm.

Nguyên lý: Split → Apply → Combine

Thuật ngữ “split-apply-combine” do Hadley Wickham (tác giả nhiều package nổi tiếng cho R) đặt ra, mô tả chính xác 3 bước của mọi phép toán “gom nhóm”:

SplitChia theo nhóm(vùng, tháng…)ApplyTính toán mỗi nhóm(tổng, trung bình…)CombineGhép kết quả lạithành 1 bảng
3 bước: chia dữ liệu theo khóa nhóm (split) → áp dụng 1 hàm tính toán cho mỗi nhóm riêng (apply) → ghép kết quả các nhóm lại thành 1 bảng kết quả (combine).

Điều hay là bạn không cần tự viết 3 bước này — pandas làm tất cả chỉ bằng 1 dòng groupby().

Cách dùng cơ bản — và mở rộng ra nhiều nhóm cùng lúc

df.groupby(“vung”)[“doanh_so”].sum()# Kết quả: tổng doanh số theo TỪNG vùngdf.groupby([“vung”,”thang”])[“doanh_so”].mean()# Kết quả: trung bình doanh số theo vùng VÀ tháng1 dòng code = câu trả lời cho câu hỏi kinh doanh thật
Có thể nhóm theo 1 cột (vùng) hoặc nhiều cột cùng lúc (vùng VÀ tháng) — pandas tự xử lý việc kết hợp nhóm.

Khóa nhóm (groupby key) có thể là 1 cột, nhiều cột, hoặc cả 1 hàm tính toán riêng. Sau khi nhóm, có thể áp nhiều hàm tổng hợp khác nhau cùng lúc (tổng, trung bình, số lượng…) bằng .agg([...]). Đây chính là công cụ bạn sẽ dùng để trả lời hầu hết câu hỏi dạng “theo từng…” trong công việc phân tích thật — từ báo cáo bán hàng đến phân tích tài chính theo từng quý, từng ngành.

Xem thêm

Video này (tiếng Anh) thực hành groupby trên dữ liệu khảo sát thật (StackOverflow Developer Survey), rất chi tiết và dễ theo.

Checklist tự kiểm tra sau bài này
  • Bạn giải thích được 3 bước split-apply-combine bằng lời của mình.
  • Bạn viết được 1 dòng code groupby để tính tổng/trung bình theo 1 nhóm.
  • Bạn biết cách nhóm theo NHIỀU cột cùng lúc (không chỉ 1 cột).
Cần nhớ

Hầu hết câu hỏi phân tích dữ liệu thực tế có dạng “… theo từng…” (theo vùng, theo tháng, theo loại khách hàng). Khi gặp câu hỏi dạng này, phản xạ đầu tiên nên là nghĩ đến groupby — đây là công cụ dùng thường xuyên nhất trong công việc phân tích dữ liệu thật, nhiều hơn hẳn các kỹ thuật phức tạp khác.

Câu hỏi thường gặp

groupby có làm thay đổi dữ liệu gốc không?

Không — groupby tạo ra 1 đối tượng/kết quả MỚI, dữ liệu gốc trong DataFrame ban đầu không bị thay đổi, an toàn để thử nhiều cách nhóm khác nhau.

Làm sao áp nhiều hàm tổng hợp khác nhau cùng lúc?

Dùng .agg([‘sum’, ‘mean’, ‘count’]) sau groupby — sẽ ra 1 bảng có đủ cả tổng, trung bình, số lượng cho mỗi nhóm, không cần viết riêng từng dòng.

groupby có áp dụng được cho dữ liệu tài chính không?

Rất nhiều — ví dụ nhóm giao dịch theo mã cổ phiếu để tính tổng khối lượng giao dịch mỗi mã, hoặc nhóm theo tháng để tính lợi nhuận trung bình mỗi tháng.

Nguồn: Wes McKinney, Python for Data Analysis (3rd ed.), Chương 10 “Data Aggregation and Group Operations” (O’Reilly, 2022) — thuật ngữ “split-apply-combine” dẫn theo Hadley Wickham. Nội dung diễn giải lại bằng lời riêng, không sao chép nguyên văn.