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

Áp dụng hàm cho từng hàng trong Pandas DataFrame với apply()

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.