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”:
Đ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
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.
- 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).
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.
