Tự động Căn chỉnh Chỉ số & Đối soát Số liệu Đa nguồn
Trong hệ thống tài chính và kế toán doanh nghiệp, số liệu báo cáo thường được xuất từ hai nguồn độc lập: Sổ cái chính (primary_df) và Hệ thống đối soát ngân hàng/đối tác (secondary…
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, index alignment rules, combine first.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu sâu cơ chế tự động căn chỉnh chỉ số (Index & Column Alignment) của
pandas.DataFramekhi thực hiện các phép tính số học. - Sử dụng phương thức số học có tham số điền khuyết (
sub(..., fill_value=...)) để triệt tiêu việc sinh giá trịNaNngoài ý muốn khi nhãn chỉ mục không khớp nhau giữa hai nguồn. - Áp dụng phương thức
combine_first()để hợp nhất dữ liệu đa nguồn với thứ tự ưu tiên xác định.
Mô tả bài toán
Trong hệ thống tài chính và kế toán doanh nghiệp, số liệu báo cáo thường được xuất từ hai nguồn độc lập: Sổ cái chính (primary_df) và Hệ thống đối soát ngân hàng/đối tác (secondary_df). Cả hai bảng đều dùng mã định danh đối tác (account_id) làm Index và các cột đo lường chỉ số tài chính (như revenue, fees, volume).
Tuy nhiên:
- Một số đối tác có thể chỉ xuất hiện ở một trong hai hệ thống.
- Một số cột chỉ tiêu có thể chỉ tồn tại ở một bên.
Hãy viết hàm: reconcile_and_aggregate_metrics(primary_df: pd.DataFrame, secondary_df: pd.DataFrame, fill_value: float = 0.0) -> dict[str, pd.DataFrame]
Yêu cầu thực hiện:
- Kiểm tra đầu vào:
- Cả hai đối số
primary_dfvàsecondary_dfphải làpd.DataFrame. Nếu không, ném ngoại lệTypeError("Inputs must be pandas DataFrames"). - Tính toán Bảng chênh lệch (
diff): - Lấy
primary_dftrừ đisecondary_dfsử dụngprimary_df.sub(secondary_df, fill_value=fill_value). - Bảng kết quả sẽ có tập chỉ số (Index) và tập cột (Columns) là phép hợp (Union) của hai bảng gốc.
- Thêm một cột mới mang tên
'total_abs_diff'bằng tổng giá trị tuyệt đối của tất cả các cột số liệu chênh lệch trên từng dòng:
diff_df['total_abs_diff'] = diff_df[original_metric_cols].abs().sum(axis=1)
- Ép toàn bộ kiểu dữ liệu số về
float64. - Sắp xếp Index của
diff_dftheo thứ tự tăng dần (sort_index()). - Tính toán Bảng hợp nhất chuẩn (
combined): - Hợp nhất hai bảng bằng
primary_df.combine_first(secondary_df). Giá trị tạiprimary_dfđược ưu tiên giữ nguyên; các ô khuyết (NaN) được bù đắp bởi giá trị từsecondary_df. - Nếu sau khi kết hợp vẫn còn ô
NaN(do ô đó khuyết ở cả 2 bảng), điền giá trịfill_value. - Ép kiểu toàn bộ dữ liệu số về
float64. - Sắp xếp Index của
combined_dftheo thứ tự tăng dần (sort_index()). - Đầu ra:
- Trả về dictionary:
{"diff": diff_df, "combined": combined_df}.
Input
- Các tham số truyền vào hàm/lớp reconcile_and_aggregate_metrics 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 reconcile_and_aggregate_metrics hoặc dữ liệu in ra màn hình theo đúng đặc tả.
Ràng buộc
- Số dòng của mỗi bảng: 1 ≤ N ≤ 105.
- Giá trị số liệu: các số thực nằm trong khoảng [-109, 109].
- Các thao tác không được làm thay đổi (mutate) dữ liệu của
primary_dfvàsecondary_dfban đầu.
Ví dụ 1
Input
reconcile_and_aggregate_metrics(primary={'ACCT_01': {'revenue': 100.0, 'cost': 40.0}, 'ACCT_02': {'revenue': 200.0, 'cost': 90.0}}, secondary={'ACCT_02': {'revenue': 190.0, 'cost': 85.0}, 'ACCT_03': {'revenue': 150.0, 'cost': 70.0}}, fill_value=0.0)Output
{'diff': {'ACCT_01': {'revenue': 100.0, 'cost': 40.0, 'total_abs_diff': 140.0}, 'ACCT_02': {'revenue': 10.0, 'cost': 5.0, 'total_abs_diff': 15.0}, 'ACCT_03': {'revenue': -150.0, 'cost': -70.0, 'total_abs_diff': 220.0}}, 'combined': {'ACCT_01': {'revenue': 100.0, 'cost': 40.0}, 'ACCT_02': {'revenue': 200.0, 'cost': 90.0}, 'ACCT_03': {'revenue': 150.0, 'cost': 70.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
reconcile_and_aggregate_metrics(primary={'A': {'v1': 50.0, 'v2': 25.0}, 'B': {'v1': 80.0, 'v2': 40.0}}, secondary={'A': {'v1': 50.0, 'v2': 25.0}, 'B': {'v1': 80.0, 'v2': 40.0}})Output
{'diff': {'A': {'v1': 0.0, 'v2': 0.0, 'total_abs_diff': 0.0}, 'B': {'v1': 0.0, 'v2': 0.0, 'total_abs_diff': 0.0}}, 'combined': {'A': {'v1': 50.0, 'v2': 25.0}, 'B': {'v1': 80.0, 'v2': 40.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.
