以下代码在SAS中创建为名为“标记”的列:
Case When t3.Proportion=. then case when t3.'Standardised proportion'n >t1.SigmaMultiple Then 1 else 0
End
Else
Case When t3.Proportion=. and abs(t3.'Standardised proportion'n) > t1.SigmaMultiple Then 1 Else 0
End
End
我试图在python中复制它,通常我会编写一个条件代码,但是当aspect让我感到困惑时,嵌套的情况会发生
我尝试过但似乎不匹配的代码:
conditions =[
((dfSigmamissing['Proportion'] == 0) & (dfSigmamissing['SP'] > dfSigmamissing['SigmaMultiple'])),
((dfSigmamissing['Proportion'] == 0) & (dfSigmamissing['SP'] < dfSigmamissing['SigmaMultiple'])),
((dfSigmamissing['SP'].abs() > (dfSigmamissing['SigmaMultiple'])))
]
choices = [1,0,1]
dfSigmamissing['Flagged'] = np.select(conditions, choices, default=0)
任何帮助都将不胜感激
多谢各位
我认为,您已经非常接近了,您需要从
conditions
列表中删除第二个条件,因为如果第一个条件失败,np.select
将返回到那里。否则,前两个条件中的一个(几乎)总是正确的,因为它们(几乎)是互补的。此外,我们需要dfSigmamissing['Proportion'] == 0
最后一个条件也是:其作用如下:
检查第一个条件是否成立
如果是,请在相应行中输入1
如果不是,则转到第二个条件
第二个条件成立吗
如果是,请在相应行中输入1
如果不是,则返回默认值,即0
为了避免代码中的重复,我们可以重构一些条件元素:
这可能会增加可读性
我们可以更进一步,粘合前两个条件,因为它们都将输出1。这意味着我们现在有2个条件,所以我们可以使用
np.where
,这是np.select
的特例。此外,据我所知,sp > sigma_mul
包含在sp.abs() > sigma_mul
中,因此我们可以删除前者:相关问题 更多 >
编程相关推荐