Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tìm phần tử xuất hiện nhiều nhất trong Series Python

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.