Khởi tạo VPS trong 60 giây · Hoàn tiền trong 7 ngày · Hỗ trợ kỹ thuật 24/7
Bitech Bitech
Hướng dẫn

Hướng dẫn sử dụng hàm apply() trong Pandas DataFrame chi tiết

Tìm hiểu cách sử dụng phương thức apply() trong Pandas DataFrame qua các ví dụ code thực tế, tùy chỉnh trục axis, kết quả trả về và tối ưu hiệu năng.

Hàm apply() trong thư viện Pandas là một trong những công cụ linh hoạt nhất để thao tác và biến đổi dữ liệu trên DataFrame. Bài viết này sẽ hướng dẫn bạn cách sử dụng apply() chi tiết qua các ví dụ kỹ thuật cụ thể.

1. Cú pháp cơ bản của apply()

Cú pháp cơ bản của phương thức apply() như sau:

DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
  • func: Hàm Python sẽ áp dụng cho từng hàng hoặc từng cột.
  • axis: Trục thao tác (0 hoặc 'index' cho cột; 1 hoặc 'columns' cho hàng).
  • result_type: Định dạng kết quả trả về khi axis=1 (nhận giá trị 'expand', 'reduce', hoặc 'broadcast').

2. Áp dụng hàm theo cột hoặc hàng

Áp dụng theo cột (axis=0)

Mặc định, apply() sẽ duyệt qua từng cột trong DataFrame.

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [10, 20, 30]
})

# Tính tổng của từng cột
result = df.apply(lambda col: col.sum(), axis=0)
print(result)

Áp dụng theo hàng (axis=1)

Khi đặt axis=1, hàm sẽ được áp dụng lần lượt cho từng hàng dữ liệu.

# Tạo cột mới bằng cách tính tổng giá trị của hai cột A và B trên mỗi hàng
df['Total'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
print(df)

3. Tùy chỉnh dữ liệu trả về với result_type

Tham số result_type giúp bạn kiểm soát định dạng cấu trúc của dữ liệu đầu ra khi thực hiện thao tác theo hàng (axis=1):

  • expand: Biến danh sách kết quả (list-like) thành các cột riêng biệt trong DataFrame mới.
  • reduce: Trả về một Series nếu có thể thay vì DataFrame.
  • broadcast: Giữ nguyên hình dạng gốc của DataFrame và phân bổ kết quả vào từng vị trí tương ứng.
# Ví dụ sử dụng result_type='expand'
def custom_func(row):
    return [row['A'] * 2, row['B'] * 3]

df_expanded = df.apply(custom_func, axis=1, result_type='expand')
print(df_expanded)

4. Cập nhật về việc thay thế applymap()

Từ phiên bản Pandas 2.1.0 trở đi, phương thức applymap() đã bị đánh dấu ngừng hỗ trợ (deprecated). Để áp dụng một hàm lên từng phần tử đơn lẻ (element-wise) của toàn bộ DataFrame, bạn nên chuyển sang sử dụng phương thức DataFrame.map().

# Thay thế applymap bằng map cho toàn bộ DataFrame
df_mapped = df.map(lambda x: x * 10)

5. Tối ưu hiệu năng

Mặc dù apply() rất linh hoạt, bản chất của nó vẫn chạy một vòng lặp Python dưới nền. Do đó, tốc độ xử lý của apply() sẽ chậm hơn đáng kể so với các phép toán vector hóa (vectorized operations) của Pandas hoặc NumPy.

Lời khuyên: Bạn nên ưu tiên sử dụng các hàm toán tử tích hợp sẵn của Pandas (ví dụ: df['A'] + df['B']) trước khi nghĩ đến việc dùng apply() cho các tập dữ liệu lớn.


Ngày phát hành: 16/06/2026
Nguồn: www.digitalocean.com