python - 向 numpy.where 语句添加额外的计算
问题描述
所以,我目前有以下代码 - 它根据其他两个列计算一个新列,具体取决于哪一个存在数据。我想在代码中添加一个额外的步骤。如果在计算中使用的列中的数据 (Total-S_%S
和Sulphate-S_%S
)Sulphate-S(HCL Leachable)_%S
为负数,程序会将负数乘以 -0.5,然后按照代码中的描述继续计算。我不确定从哪里开始。谢谢,
df['Sulphide-S(calc)-C_%S'] = np.where(
df["Sulphate-S(HCL Leachable)_%S"].isna(),
df["Total-S_%S"]- df["Sulphate-S_%S"],
df["Total-S_%S"]- df["Sulphate-S(HCL Leachable)_%S"])
解决方案
在此答案评论的附加输入之后,下面的第一个选项实际上不起作用,但我将其保留在这里以供参考。请查看实际工作解决方案的第二个选项 您可以创建一个嵌套的 np.where() 语句,如下所示:
df['Sulphide-S(calc)-C_%S'] = np.where((df["Total-S_%S"] < 0) & (df["Sulphate-S(HCL Leachable)_%S"] >= 0),
np.where(
df["Sulphate-S(HCL Leachable)_%S"].isna(),
df["Total-S_%S"]- df["Sulphate-S_%S"],
df["Total-S_%S"]- df["Sulphate-S(HCL Leachable)_%S"]),
np.where(
df["Sulphate-S(HCL Leachable)_%S"].isna(),
df["Total-S_%S"] * (-0.5) - df["Sulphate-S_%S"] * (-0.5),
df["Total-S_%S"] * (-0.5) - df["Sulphate-S(HCL Leachable)_%S"] * (-0.5))
下面的工作解决方案
否则,您可以创建 2 列,每列都会处理来自初始列的值,如下所示:
df["Sulphate-S_%S_PROCESSED"] = np.where(df["Sulphate-S_%S"] < 0,
df["Sulphate-S_%S"] * -0.5,
df["Sulphate-S_%S"])
然后对这些新列进行计算
推荐阅读
- c# - 如果设置了 IgnoreSymbolStoreSequencePoints 标志,是否为第三方 dll 生成 .pdb 文件有助于在调试期间进行源步进?
- python - 无法在 pyspark 中将 python eval() 用作 pandas udf,但在 python udf 中也可以使用
- reactjs - 为什么 Jest 标记为从主题提供者检索到的未发现数据?
- git - Git push 正在删除分支
- javascript - 百分比计算JS
- java - Java - 直接在 AWS S3 存储桶中将 word 转换为 pdf,而无需在本地下载
- outlook-addin - Outlook 2016 缓存加载项图像多长时间?
- spring - Spring Security:AuthenticationProvider 和 UserDetailsService 之间的链接
- sql - 如何在 postgres 中计算每天的不同时间戳?
- node.js - E503 发布 NPM 时发现错误。我该如何解决?