Нужна специальная функция isna
для проверки NaN
s значения:
df['HTYPE'] = np.where(df['PUMA'].isna(), -999, df['HTYPE'] )
#for oldier versions of pandas
#df['HTYPE'] = np.where(df['PUMA'].isnull(), -999, df['HTYPE'] )
, потому что design :
np.nan == np.nan
False
Также вместо двойного np.where
возможно использование numpy.select
:
df = pd.DataFrame({'PUMA':[500,3302, np.nan, 9503],
'WGTP':[21,0,6,6],
'HTYPE':[20,0,0,0]})
print (df)
PUMA WGTP HTYPE
0 500.0 21 20
1 3302.0 0 0
2 NaN 6 0
3 9503.0 6 0
df['HTYPE'] = np.select([df['PUMA']==500, df['PUMA'].isna()],
[5, -999],
default=df['HTYPE'] )
print (df)
PUMA WGTP HTYPE
0 500.0 21 5
1 3302.0 0 0
2 NaN 6 -999
3 9503.0 6 0