python-248Đọc toàn bộ đề miễn phí

Điền điểm thiếu rồi tính trung bình theo đội

Bảng điểm của một cuộc thi có vài thí sinh bỏ thi, nên ô điểm của họ là None. Ban tổ chức

PythonCơ bản12 phút

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ủ đề

pandasfillnagroupbyentry-ramp

Kiến thức tiên quyết: python-basics, pandas-missing-data.

Nội dung đề bài

Mô tả bài toán

Bảng điểm của một cuộc thi có vài thí sinh bỏ thi, nên ô điểm của họ là None. Ban tổ chức không muốn loại cả dòng vì như vậy số thí sinh của đội thay đổi; họ muốn điền tạm ô trống bằng trung bình cộng của những điểm đã có, rồi mới tính điểm trung bình của từng đội. pandas thực hiện hai bước đó bằng fillna và groupby.

Yêu cầu

Viết hàm team_mean_score(rows):

  • tính trung bình cộng của mọi điểm khác None;
  • thay mỗi điểm None bằng chính giá trị trung bình đó;
  • trả về danh sách dict gồm "team" và "mean_score", sắp theo team tăng dần;
  • ném ValueError nếu rows rỗng hoặc nếu mọi điểm đều thiếu.

Quy ước nộp bài

Nộp hàm team_mean_score trong solution.py. Hệ thống gọi hàm trực tiếp, so số với sai số 1e-6 và kiểm tra ngoại lệ ValueError; không đọc dữ liệu từ stdin và không in ra stdout.

Input

  • rows: danh sách dict với khoá "team" (chuỗi) và "score" (số thực hoặc None), từ 1

đến 200 dòng.

Output

Danh sách dict hai khoá "team" và "mean_score", mỗi đội một dòng, giá trị là trung bình cộng các điểm sau khi đã điền.

Ràng buộc

  • Giá trị điền vào phải là trung bình của các điểm đã có, không phải 0 và không bỏ dòng.
  • ValueError cho hai trường hợp: danh sách rỗng, và mọi điểm đều thiếu.
  • Giá trị trả về là danh sách dict, không phải DataFrame.

Ví dụ 1

Input

team_mean_score(rows=[{"team": "A", "score": 3.0}, {"team": "B", "score": 5.0}, {"team": "A", "score": null}, {"team": "B", "score": null}])

Output

[{"team": "A", "mean_score": 3.5}, {"team": "B", "mean_score": 4.5}]

Ví dụ 2

Input

team_mean_score(rows=[{"team": "Solo", "score": 10.0}])

Output

[{"team": "Solo", "mean_score": 10.0}]

Giải thích

Với rows = [{"team": "A", "score": 3.0}, {"team": "B", "score": 5.0}, {"team": "A", "score": None}, {"team": "B", "score": None}] thì các điểm đã có là 3.0 và 5.0, trung bình cộng bằng 4.0. Sau khi điền, đội A có 3.0 và 4.0 nên trung bình 3.5, đội B có 5.0 và 4.0 nên trung bình 4.5. Kết quả là [{"team": "A", "mean_score": 3.5}, {"team": "B", "mean_score": 4.5}].

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.

Nhóm Zalo