Нет необходимости сначала преобразовывать значения в NaN
. Итак, давайте предположим, что это отправная точка:
np.random.seed(0)
s = pd.Series(np.random.randint(0,100, 50))
Тогда вы можете использовать loc
с np.resize
:
mask = s > 25
s.loc[mask] = np.resize([10, 20, 30], mask.sum())
В качестве альтернативы, с pd.Series.mask
:
s = s.mask(s > 25, np.resize([10, 20, 30], len(s.index)))
Результат:
print(s.head(10))
# 0 10
# 1 20
# 2 30
# 3 10
# 4 20
# 5 9
# 6 30
# 7 21
# 8 10
# 9 20
# dtype: int32