Nếu tôi có một hàmChạy chức năng đúng một lần cho mỗi hàng trong một dataframe Pandas
def do_irreversible_thing(a, b):
print a, b
Và một dataframe, nói
df = pd.DataFrame([(0, 1), (2, 3), (4, 5)], columns=['a', 'b'])
gì là cách tốt nhất để chạy các chức năng đúng một lần cho mỗi hàng trong một khung dữ liệu gấu trúc. As được chỉ ra trong questions khác, giống như gấu trúc df.apply sẽ gọi hàm hai lần cho hàng đầu tiên. Thậm chí sử dụng NumPy
np.vectorize(do_irreversible_thing)(df.a, df.b)
gây chức năng được gọi là hai lần trên hàng đầu tiên, như sẽ df.T.apply()
hay df.apply (..., trục = 1).
Có cách nào nhanh hơn hoặc sạch hơn để gọi hàm với mọi hàng hơn vòng lặp rõ ràng này không?
for idx, a, b in df.itertuples():
do_irreversible_thing(a, b)
Sẽ không 'df.apply (lambda x: do_irreversible_thing (x [ 'a'] , x ['b']), axis = 1) 'hoạt động? bên cạnh ý tưởng là sử dụng các phương pháp vectorised trong chức năng của bạn để nó hoạt động trên toàn bộ các cột quan tâm – EdChum
Điều này nghe giống như một công việc cho một vòng lặp 'for'. Nói chung không phải là cách tốt để vector hóa các tác dụng phụ. – user2357112
Nếu các tác dụng phụ không phụ thuộc vào hoạt động của mỗi hàng thì nó phải được vectorizable – EdChum