所以,我目前有下面的代码 - 它根据另外两个列计算一个新列,具体取决于哪一个列有数据。我想在代码中添加一个额外的步骤。如果计算中使用列中的数据(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"])
然后对这些新列进行计算
关于python - 向 numpy.where 语句添加额外的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65145307/