Trong phân tích kinh tế và kinh doanh, chúng ta hiếm khi chỉ quan tâm đến một giao dịch bán lẻ hay một khách hàng đơn lẻ. Để đánh giá bức tranh toàn cảnh, nhà quản trị cần nhìn dữ liệu ở mức độ vĩ mô hơn: Khu vực nào đang mang lại lợi nhuận cao nhất? Danh mục sản phẩm nào đang tăng trưởng?
Để trả lời những câu hỏi này, dữ liệu thô (thường ở định dạng từng dòng giao dịch chi tiết) cần được nén và tái cấu trúc. Thư viện Pandas cung cấp hai "vũ khí" phân tích tối thượng cho nhiệm vụ này: GroupBy và Pivot Table.
Kỹ thuật gom nhóm trong Pandas được vận hành dựa trên triết lý Split - Apply - Combine (Phân tách - Áp dụng - Kết hợp) do Hadley Wickham định hình:
Split (Phân tách): Dữ liệu khổng lồ ban đầu được chia cắt thành các nhóm nhỏ độc lập dựa trên một hoặc nhiều biến phân loại (ví dụ: chia theo Region hoặc Category).
Apply (Áp dụng): Một hàm tính toán thống kê (như tính tổng sum, tính trung bình mean, hoặc đếm count) được áp dụng riêng rẽ lên từng nhóm.
Combine (Kết hợp): Kết quả của từng nhóm được gộp lại thành một bảng dữ liệu tóm tắt hoàn toàn mới.
GroupBy là phương pháp mạnh mẽ nhất để thực hiện cơ chế trên. Đặc biệt, thông qua hàm agg(), Pandas cho phép chúng ta thực hiện nhiều phép tính thống kê khác nhau trên nhiều cột cùng một lúc.
Ví dụ: Ta có thể vừa tính Tổng doanh thu (sum), vừa tính Trung bình lợi nhuận (mean), và Đếm số lượng đơn hàng (count) chỉ trong một dòng lệnh duy nhất. Dữ liệu đầu ra của GroupBy thường ở dạng bảng dọc (Long format).
Nếu GroupBy trả về kết quả dạng danh sách dọc kéo dài, thì Pivot Table (Bảng tổng hợp chéo) giúp tái cấu trúc dữ liệu thành dạng ma trận hai chiều (Wide format). Cấu trúc này y hệt như PivotTable trong Excel nhưng có thể xử lý hàng triệu dòng với tốc độ của mã máy.
Các tham số cốt lõi của pd.pivot_table() bao gồm:
index: Biến được dùng làm Tiêu đề Hàng (Dòng).
columns: Biến được dùng làm Tiêu đề Cột.
values: Các biến số học cần tính toán (như Doanh thu, Lợi nhuận).
aggfunc: Hàm tính toán (Mặc định là mean, thường dùng sum).
margins=True: Tự động thêm hàng/cột tính "Tổng cộng" (All).
fill_value=0: Tự động điền số 0 vào các ô không có dữ liệu (thay vì để trống NaN).
Dưới đây là một ví dụ thực chiến. Chúng ta sẽ tạo một trích đoạn dữ liệu mô phỏng lại bộ Superstore Sales Dataset, bao gồm thông tin về Khu vực (Region), Danh mục sản phẩm (Category), Doanh thu (Sales) và Lợi nhuận (Profit).
Bạn có thể sao chép đoạn mã sau, dán vào Google Colab và chạy để so sánh trực tiếp kết quả giữa GroupBy và Pivot Table:
# 1. TẠO TRÍCH ĐOẠN DỮ LIỆU SUPERSTORE SALES
data = {
'Region': ['South', 'South', 'West', 'West', 'Central', 'Central', 'East', 'East'],
'Category': ['Furniture', 'Technology', 'Furniture', 'Technology', 'Office Supplies', 'Technology', 'Furniture', 'Office Supplies'],
'Sales': [261.96, 731.94, 91.96, 258.57, 167.02, 170.41, 208.29, 205.51],
'Profit': [41.91, 219.58, 15.63, 19.39, 25.10, 30.50, 50.10, 60.20]
}
df_superstore = pd.DataFrame(data)
print("--- DỮ LIỆU GIAO DỊCH GỐC (THÔ) ---")
print(df_superstore.head())
# 2. SỬ DỤNG GROUPBY: TÍNH TỔNG DOANH THU & LỢI NHUẬN THEO DANH MỤC
print("\n--- 1. KẾT QUẢ GROUPBY (DẠNG DỌC) ---")
groupby_result = df_superstore.groupby('Category').agg(
Total_Sales=('Sales', 'sum'),
Total_Profit=('Profit', 'sum'),
Order_Count=('Region', 'count')
).reset_index()
print(groupby_result)
# 3. SỬ DỤNG PIVOT TABLE: MA TRẬN DOANH THU (KHU VỰC x DANH MỤC)
print("\n--- 2. KẾT QUẢ PIVOT TABLE (DẠNG MA TRẬN 2 CHIỀU) ---")
pivot_result = pd.pivot_table(
df_superstore,
values='Sales',
index='Region', # Khu vực làm Hàng
columns='Category', # Danh mục làm Cột
aggfunc='sum', # Tính tổng
fill_value=0, # Thay NaN bằng 0
margins=True, # Thêm dòng/cột Tổng cộng (All)
margins_name='Total'
)
print(pivot_result)
Phân tích kết quả đầu ra:
Ở phương pháp GroupBy, bạn sẽ nhận được một bảng dọc rất gọn gàng cho biết ngành hàng Technology mang lại doanh thu và lợi nhuận tổng cao nhất. Định dạng này cực kỳ phù hợp để tiếp tục đưa vào vẽ biểu đồ cột (Bar chart) hoặc biểu đồ tròn (Pie chart).
Ở phương pháp Pivot Table, dữ liệu được trải rộng thành ma trận. Bạn có thể nhìn thấy ngay điểm giao thoa: Khách hàng ở khu vực South mua Technology mang lại doanh số lớn nhất (731.94), trong khi khu vực West bán Furniture lại rất kém (91.96). Cột và hàng Total ở rìa ngoài giúp bạn có ngay tổng doanh thu của từng Vùng và từng Danh mục mà không cần bấm máy tính.
GroupBy và Pivot Table không đơn thuần là những dòng lệnh kỹ thuật; trong phân tích kinh doanh, chúng chính là những "lăng kính" (lens) để nhìn xuyên qua dữ liệu.
Một tập dữ liệu hàng triệu dòng giao dịch kế toán sẽ là vô nghĩa nếu nhà quản lý không thể thấy được bức tranh toàn cục. Bằng cách thiết lập ma trận chéo (cross-tabulation) thông qua Pivot Table, các Giám đốc kinh doanh có thể ngay lập tức phát hiện ra những "vùng trũng" lợi nhuận (ví dụ: một khu vực có doanh thu cao nhưng lợi nhuận lại âm do chi phí vận hành lớn), từ đó đưa ra quyết định tái phân bổ nguồn lực marketing, tối ưu hóa chuỗi cung ứng hoặc thiết kế lại chính sách chiết khấu (Discount) cho từng vùng địa lý riêng biệt.