То, с чем вы столкнулись вполне известный эффект, который называется "эффект цепочечного индексирования". Он описан в серьезных источниках по Pandas, которыми и советую пользоваться, а не всякими профанированными видосиками да статейками.
Тем не менее, ответ на ваш вопрос прост:
test=pd.DataFrame({"a":[5,3,None,4],
"b":[None,2,4,3],
"c":[4,3,3,5],
"d":[5,4,None,None]})
test.loc[test['c']==3,'d']=test[test['c']==3]['d'].ffill()
test
Результат:
a b c d
0 5.0 NaN 4 5.0
1 3.0 2.0 3 4.0
2 NaN 4.0 3 4.0
3 4.0 3.0 5 NaN
Оно?