Mô tả bài toán
Cho Series:
0 1 1 2 2 3 3 2 4 3 5 3 6 3 7 4 8 4 9 2
Yêu cầu: Tìm phần tử có tần suất xuất hiện cao nhất (mode). Kết quả: 3 (xuất hiện 4 lần).
Giải pháp 1: Dùng functools.reduce (cách gốc)
So sánh cặp đôi để tìm phần tử có count lớn nhất.
import pandas as pd
import functools as ft
l = [1,2,3,2,3,3,3,4,4,2]
data = pd.Series(l)
most_repeated = ft.reduce(
lambda x, y: x if len(data[data==x]) > len(data[data==y]) else y,
data
)
print("Phần tử lặp nhiều nhất:", most_repeated)
Giải pháp 2: Dùng value_counts() (khuyên dùng - chuẩn pandas)
import pandas as pd
data = pd.Series([1,2,3,2,3,3,3,4,4,2])
# Cách 1: value_counts() + index[0]
mode_val = data.value_counts().index[0]
print("Mode (cách 1):", mode_val)
# Cách 2: mode() method (trả về Series, có thể multiple modes)
modes = data.mode()
print("Mode(s) (cách 2):", modes.tolist())
# Cách 3: Kèm tần suất
vc = data.value_counts()
print(f"Phần tử: {vc.index[0]}, Tần suất: {vc.iloc[0]}")
Đầu ra
Mode (cách 1): 3 Mode(s) (cách 2): [3] Phần tử: 3, Tần suất: 4
Giải pháp 3: Thư viện statistics (Python 3.8+)
from statistics import mode, multimode
import pandas as pd
data = pd.Series([1,2,3,2,3,3,3,4,4,2])
print("mode():", mode(data)) # 1 giá trị duy nhất
print("multimode():", multimode(data)) # List tất cả mode
Khuyên dùng: data.mode() hoặc data.value_counts().index[0] - ngắn gọn, hiệu quả, xử lý tốt multiple modes.