Jeśli mam funkcjiRun funkcja dokładnie jeden raz dla każdego wiersza w dataframe pandy
def do_irreversible_thing(a, b):
print a, b
a dataframe, powiedzmy
df = pd.DataFrame([(0, 1), (2, 3), (4, 5)], columns=['a', 'b'])
Jaki jest najlepszy sposób, aby uruchomić funkcję dokładnie raz dla każdego wiersza w ramce danych pandy. As wskazał w innym questions, coś jak df.apply pandy wywoła funkcję dwa razy dla pierwszego rzędu. Nawet przy numpy
np.vectorize(do_irreversible_thing)(df.a, df.b)
powoduje, że funkcja jest wywoływana dwukrotnie w pierwszym rzędzie, będzie df.T.apply()
lub df.apply (..., oś = 1).
Czy istnieje szybszy lub czystszy sposób wywoływania funkcji z każdym rzędem niż ta jawna pętla?
for idx, a, b in df.itertuples():
do_irreversible_thing(a, b)
nie będzie 'df.apply (lambda x: do_irreversible_thing (x [ 'a'] , x ['b']), axis = 1) 'work? poza tym pomysł polega na użyciu wektorowanych metod w twojej funkcji, tak aby działał na wszystkich kolumnach, które Cię interesują. – EdChum
To brzmi jak zadanie dla pętli 'for'. Generalnie nie ma dobrego sposobu na wektoryzację efektów ubocznych. – user2357112
Jeśli efekty uboczne nie zależą od operacji dla każdego wiersza, to powinny być możliwe do zmaskularyzacji – EdChum