如何在pandas DataFrame中根据Beat列条件填充Disease列的值
你提供的示例DataFrame如下:
原有写法的问题
- 判断NaN不能使用
== 'NaN'或者普通值匹配逻辑,NaN是特殊缺失值标记,和任何值(包括自身)相等判断结果都为False,pandas中需使用isna()/isnull()方法检测缺失值。 - 普通
if-else是对整个Series做整体判断,无法逐行匹配每行Beat列的取值,pandas需使用向量化操作实现逐行逻辑。 fillna()仅会填充列中的空值,不会修改非空位置的取值,若你需要按Beat列规则重写整个Disease列,直接赋值即可。
正确实现方式
方法1:使用np.where(可读性最高)
import numpy as np # 逐行匹配:Beat列为空则Disease取0,否则取1 a['Disease'] = np.where(a['Beat'].isna(), 0, 1)
方法2:布尔值转整型(写法更简洁)
布尔值转整型时True对应1、False对应0,对Beat.isna()的结果取反后转整型即可直接得到目标值:
a['Disease'] = (~a['Beat'].isna()).astype(int)
如果你的Disease列仅需要填充原有的空值,不需要覆盖已有数值,可以调整写法为:
a.loc[a['Disease'].isna(), 'Disease'] = np.where(a.loc[a['Disease'].isna(), 'Beat'].isna(), 0, 1)
内容的提问来源于stack exchange,提问作者Haseeb Sultan
相关产品推荐
相关产品推荐

