假设我有以下数据帧:
ID | has_id_dummy
-----------------------
340 NaN
NaN NaN
NaN NaN
200 NaN
我想把它变成这个数据帧:
ID | has_id_dummy
-----------------------
340 1
NaN 0
NaN 0
200 1
为此,我提出了以下函数:
def dummypopulator(x):
if x != np.nan:
return 1
return 0
我用下面这句话来称呼它
df['has_id_dummy'] = df['ID'].apply(dummypopulator)
但是所有行的值都被设置为1,即使没有ID的行也应该为0
ID | has_id_dummy
-----------------------
340 1
NaN 1
NaN 1
200 1
我尝试用一个单独的lambda调用函数,如我在示例中看到的:
df['has_id_dummy'] = df['ID'].apply(lambda x: dummypopulator(x))
但结果是一样的
我觉得我错过了一个非常明显的错误,但我的生活不能明白为什么它不会工作。有人知道我做错了什么吗
值
nan
不是一个数字,不能与其他数字比较。尤其是nan==nan
不是真的(也不是nan!=nan
)在您的例子中,甚至没有必要使用
apply
。只要做df['has_id_dummy'] = df['ID'].notnull().astype(int)
原因:
我想问这个问题
相关问题 更多 >
编程相关推荐