Sample:
titanic = pd.DataFrame({'Pclass':[1,3,3] * 2,
'Cabin':[np.nan] * 2 + ['s','d','f'] + [np.nan]})
You can select rows by condition for replacement missing values:
m = titanic.Pclass==3
titanic.loc[m, 'Cabin'] = titanic.loc[m, 'Cabin'].fillna('B')
Or you can chain both conditions with &
for bitwise AND
and replace B
:
titanic.loc[(titanic.Pclass==3) & (titanic.Cabin.isna()), 'Cabin'] = 'B'
Or solution with Series.where
- conditions are inverted with !=3
, Series.notna
and |
for bitwise OR
:
titanic['Cabin'] = titanic['Cabin'].where((titanic.Pclass!=3) | (titanic.Cabin.notna()), 'B')
print (titanic)
Pclass Cabin
0 1 NaN
1 3 B
2 3 s
3 1 d
4 3 f
5 3 B