如何解决Python 中的语句时的嵌套大小写
以下代码在 SAS 中创建名为“Flagged”的列:
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 中复制它,通常我会做一个条件代码,但是当方面让我感到困惑时嵌套的案例。
我试过但似乎不匹配的代码:
conditions =[
((dfSigmamissing['Proportion'] == 0) & (dfSigmamissing['SP'] > dfSigmamissing['SigmaMultiple'])),((dfSigmamissing['Proportion'] == 0) & (dfSigmamissing['SP'] < dfSigmamissing['SigmaMultiple'])),((dfSigmamissing['SP'].abs() > (dfSigmamissing['SigmaMultiple'])))
]
choices = [1,1]
dfSigmamissing['Flagged'] = np.select(conditions,choices,default=0)
任何帮助将不胜感激。
谢谢
解决方法
我认为您非常接近,您需要从 conditions
列表中删除第二个条件,因为如果第一个条件失败,np.select
将退回到那里。否则,前两个条件之一(几乎)总是为真,因为它们(几乎)是互补的。另外,我们需要
dfSigmamissing['Proportion'] == 0
也用于最后一个条件:
conditions = [
(dfSigmamissing["Proportion"] == 0) & (dfSigmamissing["SP"] > dfSigmamissing["SigmaMultiple"]),(dfSigmamissing["Proportion"] == 0) & (dfSigmamissing["SP"].abs() > dfSigmamissing["SigmaMultiple"])
]
choices = [1,1]
default = 0
dfSigmamissing["Flagged"] = np.select(conditions,choices,default)
这可以作为:
-
检查第一个条件是否成立?
-- 如果是,则在相应的行中放 1
-- 如果不是,则转到第二个条件
-
第二个条件是否成立?
-- 如果是,则在对应行放1
-- 如果不是,则回退到默认值,即 0
为了避免代码重复,我们可以重构一些条件元素:
zero_prop = dfSigmamissing["Proportion"] == 0
sp = dfSigmamissing["SP"]
sigma_mul = dfSigmamissing["SigmaMultiple"]
conditions = [
zero_prop & (sp > sigma_mul),zero_prop & (sp.abs() > sigma_mul)
]
这可能会增加可读性。
我们可以更进一步并粘合前两个条件,因为它们都将输出 1。这意味着我们现在有 2 个条件,所以我们可以选择 np.where
,这是 np.select
的这种特殊情况。此外,据我所知,sp > sigma_mul
包含在 sp.abs() > sigma_mul
中,因此我们可以放弃前者:
condition = zero_prop & (sp.abs() > sigma_mul)
dfSigmamissing["Flagged"] = np.where(condition,1,0)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。