
🎯 1. Mục tiêu bài học
- Làm chủ kỹ thuật gom nhóm và lọc dữ liệu tự động bằng hàm
.groupby()trong thư việnpandas. - Tự động hóa quy trình tách một bảng dữ liệu tổng thành hàng chục, hàng trăm file Excel riêng lẻ theo danh mục chỉ với một lần bấm máy.
- Loại bỏ hoàn toàn các thao tác lặp đi lặp lại tốn thời gian trên Excel (Filter –> Copy –> Mở file mới –> Paste –> Save).
💼 2. Tình huống thực tế & Giải pháp
- 📌 Tình huống: Đầu tháng, bộ phận tổng hợp có một file dữ liệu lớn chứa doanh thu của cả 3 miền (Bắc, Trung, Nam). Nhiệm vụ của chú/các bạn là phải tách file này thành 3 file Excel riêng biệt tương ứng với dữ liệu của từng miền (ví dụ:
BaoCao_Bac.xlsx,BaoCao_Trung.xlsx…) để gửi cho các Trưởng chi nhánh đối soát. - ⚠️ Cách làm thủ công: Bật tính năng
Filtertrong Excel –> Chọn miền “Bac” –> Copy dữ liệu hiển thị –> Tạo file mới –> Paste –> Lưu tên file. Tiếp tục lặp lại chu kỳ này cho miền Trung và miền Nam. Nếu doanh nghiệp mở rộng ra 63 tỉnh thành, chúng ta sẽ phải làm thao tác này 63 lần, rất dễ dẫn đến sai sót hoặc đặt tên file không đồng bộ. - 🚀 Giải pháp Python: Chúng ta sẽ ra lệnh cho Python đọc file tổng, tự động nhận diện xem có bao nhiêu miền khác nhau, sau đó tự động gom nhóm dữ liệu và “xuất bản” ra các file Excel chi nhánh tương ứng trong nháy mắt.
📊 3. File dữ liệu mẫu (Data Mockup)
Học viên hãy sử dụng lại file kết quả tổng hợp từ Bài 1 hoặc tạo một file Excel mới tên là File_Tong_Hop.xlsx chứa tối thiểu 15 dòng dữ liệu dưới đây:
| STT | Ngay | Ma_Don_Hang | San_Pham | So_Luong | Don_Gia | Mien |
| 1 | 2026-07-01 | DH001 | Laptop Dell | 2 | 15000000 | Bac |
| 2 | 2026-07-01 | DH002 | Chuot Logitech | 10 | 250000 | Bac |
| 3 | 2026-07-02 | DH003 | Ban Phim Co | 5 | 1200000 | Bac |
| 4 | 2026-07-02 | DH004 | Man Hinh Asus | 3 | 3500000 | Bac |
| 5 | 2026-07-03 | DH005 | Tai Nghe Sony | 4 | 2000000 | Bac |
| 6 | 2026-07-01 | DH006 | iPhone 15 | 1 | 22000000 | Trung |
| 7 | 2026-07-01 | DH007 | Op Lung | 20 | 150000 | Trung |
| 8 | 2026-07-02 | DH008 | Sac Du Phong | 8 | 500000 | Trung |
| 9 | 2026-07-02 | DH009 | Cap Sac Type-C | 15 | 100000 | Trung |
| 10 | 2026-07-03 | DH010 | Loa Bluetooth | 2 | 1800000 | Trung |
| 11 | 2026-07-01 | DH011 | May In Canon | 1 | 4500000 | Nam |
| 12 | 2026-07-01 | DH012 | Giay In A4 | 50 | 65000 | Nam |
| 13 | 2026-07-02 | DH013 | Muc In | 5 | 300000 | Nam |
| 14 | 2026-07-02 | DH014 | O Cung SSD | 12 | 1200000 | Nam |
| 15 | 2026-07-03 | DH015 | USB 64GB | 25 | 180000 | Nam |
🛠️ 4. Hướng dẫn thực hành cầm tay chỉ việc
🔹 Bước 1: Chuẩn bị thư mục
Để các file chi nhánh sau khi tách không bị trộn lẫn với các file khác, chúng ta nên tạo sẵn một thư mục riêng mang tên Ket_Qua_Tach_File nằm cùng cấp với file chạy Python.
🔹 Bước 2: Viết mã nguồn Python
Hãy sao chép đoạn mã nguồn có chú thích chi tiết dưới đây vào môi trường làm việc (Jupyter Notebook hoặc VS Code) của bạn:
Python
import os
import pandas as pd
# 1. Khai báo tên file tổng và thư mục đích dùng để lưu các file sau khi tách
file_tong = "File_Tong_Hop.xlsx"
thu_muc_luu = "Ket_Qua_Tach_File"
# Tự động tạo thư mục lưu nếu máy tính của bạn chưa có thư mục này
if not os.path.exists(thu_muc_luu):
os.makedirs(thu_muc_luu)
print(f"👉 Đã tự động tạo thư mục mới: {thu_muc_luu}")
# 2. Đọc toàn bộ dữ liệu từ file Excel tổng vào bộ nhớ của Python
print("📖 Đang đọc dữ liệu từ file tổng...")
df = pd.read_excel(file_tong)
# 3. Sử dụng groupby() để phân loại và gom nhóm dữ liệu theo giá trị ở cột 'Mien'
print("⚡ Bắt đầu tiến trình tách file tự động...")
for ten_mien, data_mien in df.groupby("Mien"):
# Định nghĩa tên file xuất ra (Ví dụ: Ket_Qua_Tach_File/BaoCao_Bac.xlsx)
ten_file_xuat = os.path.join(thu_muc_luu, f"BaoCao_{ten_mien}.xlsx")
# 4. Xuất dữ liệu của riêng miền đó ra file Excel, lược bỏ cột chỉ số dòng (index=False)
data_mien.to_excel(ten_file_xuat, index=False)
print(f" -> Xuất thành công file cho miền: 【{ten_mien}】")
print("---")
print("🎉 HOÀN THÀNH! Toàn bộ file chi nhánh đã được tách và lưu trữ ngăn nắp.")
💡 Giải thích mã nguồn chi tiết cho dân văn phòng:
df.groupby('Mien'): Đây là tính năng cốt lõi của bài học. Nó hoạt động tương tự như việc bạn kéo cột ‘Mien’ vào ô Row trong Pivot Table. Python sẽ tự động dò quét cột này và nhận diện được 3 nhóm duy nhất: Bac, Trung, Nam.for ten_mien, data_mien in ...: Vòng lặp này giúp xử lý tuần tự từng nhóm. Ở lượt chạy đầu tiên, biếnten_miensẽ nhận giá trị chuỗi là'Bac', và biếndata_miensẽ giữ toàn bộ bảng dữ liệu gồm 5 dòng thuộc về miền Bắc.os.makedirs(thu_muc_luu): Lệnh này giúp code thông minh hơn. Nếu bạn quên chưa tạo folder chứa kết quả trên máy tính, Python sẽ tự động tạo hộ bạn, tránh việc chương trình bị báo lỗi dừng hoạt động.
📉 5. Đánh giá hiệu quả khi áp dụng bài giảng
| 📊 Tiêu chí | 📋 Thao tác lọc (Filter) thủ công trên Excel | 🤖 Tự động hóa bằng Python | 🏆 Hiệu quả thực tế |
| Tốc độ xử lý | Mất khoảng 3 – 5 phút cho 3 miền. Sẽ mất cả tiếng nếu phải tách cho 63 tỉnh thành. | Chỉ mất 0.5 giây, tốc độ xử lý gần như tức thì và không phụ thuộc vào số file cần tách. | Tối ưu vượt trội. Tiết kiệm thời gian tuyệt đối khi quy mô dữ liệu lớn. |
| Độ ổn định | Dễ bấm nhầm ô dữ liệu, đặt sai tên file hoặc lưu đè lên file cũ. | Tên file được thiết lập tự động đồng bộ theo cấu trúc lập trình sẵn. | Độ chính xác cao. Loại bỏ hoàn toàn các sai sót vô ý của con người. |
| Khả năng mở rộng | Khi phát sinh thêm chi nhánh mới, bạn lại phải làm lại các thao tác từ đầu. | Tự động cập nhật. Dữ liệu gốc có thêm bao nhiêu miền mới thì code vẫn chạy tốt. | Linh hoạt. Hệ thống tự động thích ứng với sự thay đổi của dữ liệu. |
📝 6. Bài tập mở rộng tự thực hành cho học viên
- 💪 Đề bài tập: Trong thực tế, sau khi tách file cho từng miền, Sếp thường yêu cầu bạn gửi một file tổng hợp riêng cho các sản phẩm thuộc nhóm cao cấp để theo dõi riêng.Yêu cầu: Hãy nâng cấp hoặc viết thêm một đoạn code ngắn để trích xuất riêng những dòng đơn hàng có sản phẩm là
"iPhone 15"hoặc"Laptop Dell"ra một file Excel độc lập mang tênSanPham_CaoCap.xlsx. - 💡 Hướng dẫn gợi ý: Học viên sử dụng tính năng lọc theo điều kiện dạng danh sách của pandas bằng hàm
.isin(['Laptop Dell', 'iPhone 15']). Cú pháp mẫu:df_caocap = df[df['San_Pham'].isin(['Laptop Dell', 'iPhone 15'])], sau đó dùng lệnh.to_excel()để xuất file.