首页 > 解决方案 > 向 numpy.where 语句添加额外的计算

问题描述

所以,我目前有以下代码 - 它根据其他两个列计算一个新列,具体取决于哪一个存在数据。我想在代码中添加一个额外的步骤。如果在计算中使用的列中的数据 (Total-S_%SSulphate-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"])

标签: pythonpandasnumpy

解决方案


在此答案评论的附加输入之后,下面的第一个选项实际上不起作用,但我将其保留在这里以供参考。请查看实际工作解决方案的第二个选项 您可以创建一个嵌套的 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"])

然后对这些新列进行计算


推荐阅读