Mô tả bài toán
Cho Series: [1, 2, 3, 6, 7]. Phần tử 4 và 5 bị thiếu trong dãy liên tục từ 1 đến 7.
Yêu cầu: Tìm các phần tử thiếu và tạo Series mới chứa dãy đầy đủ [1, 2, 3, 4, 5, 6, 7].
Giải pháp: Duyệt vòng lặp kiểm tra
Lấy giá trị đầu và cuối, duyệt qua khoảng đó, thêm vào list mới nếu chưa có.
Ví dụ code
import pandas as pd
import numpy as np
l = [1, 2, 3, 6, 7]
l1 = []
data = pd.Series(l)
length = len(data)
# Duyệt từ phần tử đầu đến phần tử cuối
for i in range(data[0], data[length-1] + 1): # +1 để bao gồm phần tử cuối
if i not in data.values:
l1.append(i)
else:
l1.append(i)
l1.sort()
data = pd.Series(l1)
print("Series đầy đủ:")
print(data)
Đầu ra
Series đầy đủ: 0 1 1 2 2 3 3 4 4 5 5 6 6 7 dtype: int64
Giải pháp tối ưu: Dùng reindex (khuyên dùng)
Pandas cung cấp reindex() để điền đầy đủ index.
import pandas as pd data = pd.Series([1, 2, 3, 6, 7]) # Tạo index đầy đủ từ min đến max full_index = range(data.min(), data.max() + 1) # Reindex, giá trị thiếu sẽ thành NaN data_full = data.reindex(full_index) # Điền NaN bằng giá trị index (vì đây là dãy số liên tục) data_full = data_full.fillna(data_full.index).astype(int) print(data_full)
Ưu điểm: Code ngắn, vector hóa, hiệu năng tốt trên dữ liệu lớn.