Chuyển đổi định dạng bảng Wide-to-Long và Tidy Data với melt và split
Viết hàm melt_and_clean_quarterly_reports(df: pd.DataFrame) -> pd.DataFrame:
Tiến độ của tôi ở bài này
Điểm và code bạn nộp đượ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: melt, pivot, string split.
Nội dung đề bài
Mục tiêu kiến thức
- Áp dụng nguyên lý Tidy Data: Mỗi biến là một cột, mỗi quan sát là một hàng.
- Sử dụng hàm pd.melt() unpivot các cột quý q1_revenue, q1_profit,... thành các hàng dữ liệu.
- Xử lý tách chuỗi tiền tố / hậu tố và pivot để đưa về bảng chuẩn sạch sẽ.
Mô tả bài toán
Viết hàm melt_and_clean_quarterly_reports(df: pd.DataFrame) -> pd.DataFrame:
- df: DataFrame báo cáo doanh nghiệp dạng bảng rộng (Wide Format) chứa cột định danh company_id cùng các cột số liệu 4 quý:
["q1_revenue", "q2_revenue", "q3_revenue", "q4_revenue", "q1_profit", "q2_profit", "q3_profit", "q4_profit"].
- Kiểm tra tính hợp lệ:
- Nếu df rỗng hoặc thiếu bất kỳ cột nào trong 9 cột trên, raise ValueError("DataFrame thieu cot bao cao quy").
- Chuyển đổi sang dạng bảng dài chuẩn (Tidy Long Format):
- Gom các cột số liệu thành hàng. Tách thông tin quý ("q1" -> "Q1", "q2" -> "Q2", ...) và loại chỉ số ("revenue", "profit").
- Bảng kết quả cuối cùng phải có đúng 4 cột:
- "company_id"
- "quarter": có giá trị "Q1", "Q2", "Q3", "Q4".
- "revenue": giá trị doanh thu tương ứng.
- "profit": giá trị lợi nhuận tương ứng.
- Sắp xếp kết quả tăng dần theo ["company_id", "quarter"] và reset index drop=True.
Input
- Tham số: df: pd.DataFrame.
Output
- Trả về: pd.DataFrame dạng bảng chuẩn gọn gồm 4 cột: ["company_id", "quarter", "revenue", "profit"].
Ràng buộc
- Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
melt_and_clean_quarterly_reports(data=[{'company_id': 1, 'q1_revenue': 100, 'q2_revenue': 120, 'q3_revenue': 130, 'q4_revenue': 150, 'q1_profit': 10, 'q2_profit': 15, 'q3_profit': 20, 'q4_profit': 25}])
Output
4
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
melt_and_clean_quarterly_reports(data=[{'company_id': 1, 'q1_revenue': 100}])
Output
True
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.
