Pandas mask / where métodos versus NumPy np.where

A menudo uso Pandasmask ywhere métodos para una lógica más limpia al actualizar valores en una serie condicionalmente. Sin embargo, para un código relativamente crítico para el rendimiento, noto una caída significativa en el rendimiento en relación connumpy.where.

Aunque estoy feliz de aceptar esto para casos específicos, me interesa saber:

Do Pandasmask / whereos métodos @ ofrecen cualquier funcionalidad adicional,aparte d inplace / errors / try-cast parámetros? Entiendo esos 3 parámetros, pero rara vez los uso. Por ejemplo, no tengo idea de lo que ellevel parámetro se refiere a. ¿Hay algún contraejemplo no trivial dondemask / where superanumpy.where? Si existe un ejemplo de este tipo, podría influir en la forma en que elijo los métodos apropiados en el futuro.

Para referencia, aquí hay algunos puntos de referencia en Pandas 0.19.2 / Python 3.6.0:

np.random.seed(0)

n = 10000000
df = pd.DataFrame(np.random.random(n))

assert (df[0].mask(df[0] > 0.5, 1).values == np.where(df[0] > 0.5, 1, df[0])).all()

%timeit df[0].mask(df[0] > 0.5, 1)       # 145 ms per loop
%timeit np.where(df[0] > 0.5, 1, df[0])  # 113 ms per loop

La actuación parece divergirpromove para valores no escalares:

%timeit df[0].mask(df[0] > 0.5, df[0]*2)       # 338 ms per loop
%timeit np.where(df[0] > 0.5, df[0]*2, df[0])  # 153 ms per loop

Respuestas a la pregunta(1)

Su respuesta a la pregunta