Máscara de pandas / métodos where versus NumPy np.where

Eu costumo usar pandasmask ewhere métodos para uma lógica mais limpa ao atualizar valores em uma série condicionalmente. No entanto, para código relativamente crítico de desempenho, percebo uma queda significativa de desempenho em relação anumpy.where.

Embora eu esteja feliz em aceitar isso para casos específicos, estou interessado em saber:

Do Pandasmask / where métodos oferecem qualquer funcionalidade adicional,além de inplace / errors / try-cast parâmetros? Eu entendo esses 3 parâmetros, mas raramente os uso. Por exemplo, não tenho idéia do quelevel parâmetro refere-se a.Existe algum contra-exemplo não trivial em quemask / where superanumpy.where? Se esse exemplo existir, poderá influenciar a escolha de métodos apropriados para a frente.

Para referência, aqui estão alguns testes comparativos do 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

O desempenho parece divergirmais distante para valores não 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

questionAnswers(1)

yourAnswerToTheQuestion