Phương thức apply() của DataFrame cho phép áp dụng một hàm lên từng hàng (axis=1) hoặc từng cột (axis=0). Điều này rất hữu ích khi cần tính toán giá trị mới từ nhiều cột hiện có.
Ví dụ 1: Sử dụng lambda function
Tính tích của hai cột Maths và Programming cho mỗi hàng.
import pandas as pd
def multiply(x, y):
return x * y
data = {
'Maths': [10, 34, 53],
'Programming': [23, 12, 43]
}
data_frame = pd.DataFrame(data)
print('--------------------Before------------------')
print(data_frame)
# axis=1: áp dụng cho từng hàng
data_frame['Multiply'] = data_frame.apply(lambda row: multiply(row['Maths'], row['Programming']), axis=1)
print('--------------------After------------------')
print(data_frame)Kết quả
--------------------Before------------------ Maths Programming 0 10 23 1 34 12 2 53 43 --------------------After------------------ Maths Programming Multiply 0 10 23 230 1 34 12 408 2 53 43 2279
Ví dụ 2: Sử dụng hàm built-in (sum)
Tính tổng các cột số cho mỗi hàng.
data_frame['Sum'] = data_frame.apply(sum, axis=1)
Kết quả
Maths Programming Sum 0 10 23 33 1 34 12 46 2 53 43 96
Ví dụ 3: Sử dụng hàm từ NumPy (np.sum)
import numpy as np data_frame['Sum'] = data_frame.apply(np.sum, axis=1)
Kết quả tương tự ví dụ 2.
Lưu ý quan trọng
axis=1: Duyệt theo hàng (mỗi row là một Series).axis=0(mặc định): Duyệt theo cột.- Hàm truyền vào nhận một Series (hàng hoặc cột) và trả về một giá trị scalar.
- Đối với hiệu năng cao, ưu tiên vectorization (phép toán trực tiếp trên cột) thay vì apply().
Kết luận
apply() linh hoạt cho các logic phức tạp hàng/cột. Với các phép toán đơn giản, hãy dùng phép toán vector hóa (ví dụ: df['Maths'] * df['Programming']) để nhanh hơn.