Вы должны стремиться к векторизации везде, где это возможно.Например, лучший способ сделать это с помощью
df2.A + .2 * df2.B
0 NaN
1 1.2
dtype: float64
Или, еще лучше,
np.where(df2.B.isna(), 1, df2.A + .2 * df2.B)
array([1. , 1.2])
Предполагая, что это замена для более сложной функции,причина в том, что dtype
проблема несовпадения ... возвращаемое значение усекается до int
.Попробуйте передать параметр otypes=[float]
в vectorize
, чтобы указать тип возвращаемого значения float
.
f = np.vectorize(fun, otypes=[float])
f(df2['A'], df2['B'])
array([1. , 1.2])
f(df1['A'], df1['B'])
array([1.2, 1.2])