Вы можете сделать это красиво и чисто с помощью np.select (). Я добавил некоторые <=, потому что я догадался, что вы хотите обновить все значения. Но это легко редактировать, если это необходимо. </p>
conditions = [(df['Col2'] > 0) & (df['Col2'] <= 10),
(df['Col2'] > 10) & (df['Col2'] <= 20),
(df['Col2'] > 20) & (df['Col2'] <= 30) ]
updates = [1, 2, 3]
df["Col3"] = np.select(conditions, updates, default=999)
Использование исходного диапазона приведет к этому, где значения == 10, 20, 30 получат значение 999 из np.select ().
conditions = [(df['Col2'] > 0) & (df['Col2'] < 10),
(df['Col2'] > 10.01) & (df['Col2'] < 20),
(df['Col2'] > 20.1) & (df['Col2'] < 30) ]
updates = [1, 2, 3]
df["Col3"] = np.select(conditions, updates, default=999)
print(df)
Col1 Col2 Col3
0 a 5 1
1 b 10 999
2 c 15 2
3 d 20 999
4 e 25 3
5 f 30 999
6 g 1 1
7 h 11 2
8 i 21 3
9 j 7 1