Я новичок в пандах, так что это может быть не самый эффективный ответ, но я выкину его там, потому что он, кажется, работает:
pandas.Series.where(my_series*10, cond=my_series<0.5, other=my_series*20)
Играя с разными версиями, ятакже придумал следующее, но я предполагаю, что вышеупомянутое более эффективно, поскольку оно встроено.
Версия на месте:
my_series[my_series>=0.5] *= 20
my_series[my_series<0.5] *= 10
в строке:
(my_series < 0.5)*(my_series*10) + (my_series >=0.5)*(my_series*20)
Обновление
Просто из любопытства я попробовал провести краткий тест времени, описанный выше, и был несколько удивлен результатами:
>>> setup = """
... import random, pandas
... random.seed=('skdfjaiswe')
... my_series = pandas.Series([random.random() for idx in range(1000)])
... """
>>> print min(timeit.Timer("pandas.Series.where(my_series*10, cond=my_series<0.5, other=my_series*20)", setup=setup).repeat(7, 1000))
0.758988142014
>>> print min(timeit.Timer("my_series[my_series>=0.5] *= 20; my_series[my_series<0.5] *= 10", setup=setup).repeat(7, 1000))
9.13403320312
>>> print min(timeit.Timer("(my_series < 0.5)*(my_series*10) + (my_series >=0.5)*(my_series*20)", setup=setup).repeat(7, 1000))
0.612030029297
Если я не сделал что-то здесь не так (кто-нибудь?), Похоже, что, по крайней мере, для этого примера версия с векторизацией немного быстрее.