попробуйте использовать loc
Я добавил проверку .isnull (), потому что если что-то уже существует в colA, оно не будет заменено, но если вы не хотите, вы можете проигнорировать эту проверку
import pandas
df = pd.DataFrame(data={'colA':["xyz",np.nan,np.nan,np.nan,np.nan],
"colB":['Lena','J.Brooke','B.Izzie','B.Rhodes','J.Keith']})
df.loc[(df['colA'].isnull()) &(df['colB'].str.startswith("B")),"colA"] = "new"
df.loc[(df['colA'].isnull()) &(df['colB'].str.startswith("J")),"colA"] = "old"
print(df)
colA colB
0 xyz Lena
1 old J.Brooke
2 new B.Izzie
3 new B.Rhodes
4 old J.Keith