Truy vấn Cắt lát Phân cấp MultiIndex & Tái cấu trúc Unstack
Một tập đoàn bán lẻ quản lý dữ liệu bán hàng dưới dạng DataFrame với MultiIndex 3 tầng trên trục dòng (Rows): ['Region', 'StoreType', 'Date']. Bảng chứa hai cột số liệu: 'revenue'…
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: dataframe basics, multiindex levels, xs method, unstack reshaping.
Nội dung đề bài
Mục tiêu kiến thức
- Sử dụng phương thức cắt lát mặt cắt ngang
DataFrame.xs()trên MultiIndex đa tầng với tham sốlevel. - Chuyển đổi dữ liệu dạng dài (Long format) sang dạng rộng (Wide format) bằng
unstack(), tạo ra MultiIndex trên trục cột. - Thao tác gán cột mới trên hệ thống cột đa cấp (MultiIndex columns) mà không làm mất cấu trúc phân tầng.
Mô tả bài toán
Một tập đoàn bán lẻ quản lý dữ liệu bán hàng dưới dạng DataFrame với MultiIndex 3 tầng trên trục dòng (Rows): ['Region', 'StoreType', 'Date']. Bảng chứa hai cột số liệu: 'revenue' (Doanh thu) và 'units_sold' (Số lượng bán).
Hãy viết hàm: analyze_hierarchical_sales(df: pd.DataFrame, region: str, fill_missing: float = 0.0) -> pd.DataFrame
Yêu cầu thực hiện:
- Kiểm tra đầu vào:
df.indexphải làpd.MultiIndexvà chứa đủ 3 cấp:'Region','StoreType','Date'. Nếu không, némValueError("Index must have Region, StoreType, Date levels").- Nếu
regionkhông xuất hiện trong các giá trị của cấp'Region', némKeyError(f"Region '{region}' not found"). - Trích xuất mặt cắt ngang (Cross-Section):
- Sử dụng phương thức
df.xs(region, level='Region')để lấy toàn bộ dữ liệu thuộc vùngregion. Bảng kết quả sẽ còn lại MultiIndex 2 cấp trên dòng:['StoreType', 'Date']. - Tái định hình bằng
unstack: - Đưa cấp
'StoreType'từ trục dòng lên trục cột bằngunstack(level='StoreType'). - Trục dòng hiện tại chỉ còn lại
Date. - Trục cột trở thành MultiIndex 2 tầng: tầng 0 là tên chỉ số (
'revenue','units_sold'), tầng 1 là các loại cửa hàng (StoreType). - Xử lý ô khuyết & Tính tổng:
- Điền toàn bộ ô khuyết
NaNbằng giá trịfill_missing. - Tính tổng doanh thu của tất cả các loại cửa hàng trong mỗi ngày:
daily_total_revenue = unstacked['revenue'].sum(axis=1)
- Thêm cột tổng hợp này vào trục cột đa cấp dưới dạng nhãn:
('revenue', 'ALL_STORES'). - Chuẩn hóa đầu ra:
- Sắp xếp trục cột theo thứ tự từ điển ở cả hai cấp (
sort_index(axis=1)). - Đảm bảo toàn bộ giá trị số trong bảng có kiểu
float64. - Trả về DataFrame kết quả.
Input
- Các tham số truyền vào hàm/lớp analyze_hierarchical_sales hoặc dữ liệu đầu vào theo định dạng mô tả.
Output
- Kết quả trả về của hàm/lớp analyze_hierarchical_sales hoặc dữ liệu in ra màn hình theo đúng đặc tả.
Ràng buộc
- Số dòng dữ liệu: 1 ≤ N ≤ 50,000.
- Không làm thay đổi DataFrame
dfgốc.
Ví dụ 1
Input
analyze_hierarchical_sales(records=[['North', 'Retail', '2026-01-01', 100.0, 10.0], ['North', 'Online', '2026-01-01', 150.0, 15.0], ['North', 'Retail', '2026-01-02', 120.0, 12.0], ['North', 'Online', '2026-01-02', 180.0, 18.0], ['South', 'Retail', '2026-01-01', 80.0, 8.0]], region='North', fill_missing=0.0)Output
{'2026-01-01': 250.0, '2026-01-02': 300.0}Giải thích
Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.
Ví dụ 2
Input
analyze_hierarchical_sales(records=[['Asia', 'Kiosk', '2026-02-01', 50.0, 5.0], ['Asia', 'Flagship', '2026-02-01', 300.0, 20.0], ['Asia', 'Flagship', '2026-02-02', 350.0, 25.0]], region='Asia', fill_missing=0.0)Output
{'2026-02-01': 350.0, '2026-02-02': 350.0}Giải thích
Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
