在Dataframe named titanic中,如何用满足条件Cabin
的值B
填充列Pclass==3
中的 NA 值?
应该使用where
吗?
titanic['Cabin']=titanic.where(titanic.Pclass==3).fillna('B')
也欢迎使用其他方法。
答案 0 :(得分:2)
示例:
titanic = pd.DataFrame({'Pclass':[1,3,3] * 2,
'Cabin':[np.nan] * 2 + ['s','d','f'] + [np.nan]})
您可以按条件选择行以替换丢失的值:
m = titanic.Pclass==3
titanic.loc[m, 'Cabin'] = titanic.loc[m, 'Cabin'].fillna('B')
或者您也可以将两个条件与&
链接为按位AND
并替换B
:
titanic.loc[(titanic.Pclass==3) & (titanic.Cabin.isna()), 'Cabin'] = 'B'
或者用Series.where
的解决方案-对于按位!=3
,条件用|
,Series.notna
和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