我有这样的数据:

    id    case2_q6
0   300   3.0
1   304   4.0
2   306   3.0
3   309   1.0
4   311   3.0
5   312   4.0
6   314   NaN
7   315   2.0
8   316   3.0
9   317   3.0

并使用这np.where()个函数调用来生成新变量:

df['fluid_2'] = np.where((df['case2_q6'] == 1) | (df['case2_q6'] == 2), 1, 0)

现在df具有列fluid_2,如下所示:

    id    case2_q6  fluid_2
0   300   3.0       0
1   304   4.0       0
2   306   3.0       0
3   309   1.0       1
4   311   3.0       0
5   312   4.0       0
6   314   NaN       0
7   315   2.0       1
8   316   3.0       0
9   317   3.0       0

如您所见,索引6处的NaN值被转换为0.有没有办法将np.where()设置为fluid_2中的NaN值?

所需输出将为:

    id    case2_q6  fluid_2
0   300   3.0       0
1   304   4.0       0
2   306   3.0       0
3   309   1.0       1
4   311   3.0       0
5   312   4.0       0
6   314   NaN       NaN
7   315   2.0       1
8   316   3.0       0
9   317   3.0       0

在那里NaN美元被保存下来.

推荐答案

一种可能的解决方案:

df['fluid_2'] = np.where(
    df['case2_q6'].isna(), np.nan, 
    np.where((df['case2_q6'] == 1) | (df['case2_q6'] == 2), 1, 0))

另一种可能的解决方案是:

df['fluid_2'] = df['case2_q6'].clip(upper=1).mul(df['case2_q6'].isin([1,2]))

输出:

    id  case2_q6  fluid_2
0  300       3.0      0.0
1  304       4.0      0.0
2  306       3.0      0.0
3  309       1.0      1.0
4  311       3.0      0.0
5  312       4.0      0.0
6  314       NaN      NaN
7  315       2.0      1.0
8  316       3.0      0.0
9  317       3.0      0.0

Python相关问答推荐

从pandas中的两列创建分类数据

当pip为学校作业(job)安装sourcefender时,我没有收到匹配的分发错误.我已经try 过Python 3.8.10和3.10.11

如何将不同长度的新列添加到现有的框架中

Python中使用Delivercio进行多个请求

code _tkinter. Tcl错误:窗口路径名称错误.!按钮4"

pyautogui.locateOnScreen在Linux上的工作方式有所不同

如何使用没有Selenium的Python在百思买着陆页面上处理国家/地区 Select ?

根据给定日期的状态过滤查询集

如何让 turtle 通过点击和拖动来绘制?

具有多个选项的计数_匹配

从webhook中的短代码(而不是电话号码)接收Twilio消息

使用新的类型语法正确注释ParamSecdecorator (3.12)

如何检测背景有噪的图像中的正方形

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

如何从具有不同len的列表字典中创建摘要表?

如何让这个星型模式在Python中只使用一个for循环?

在极性中创建条件累积和

python中字符串的条件替换

转换为浮点,pandas字符串列,混合千和十进制分隔符

幂集,其中每个元素可以是正或负""""