python - 向 numpy.where 语句添加额外的计算

标签 python pandas numpy

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

相关文章:

python - pandas 中高效的列内操作

python - 在包含数字和对象的数组上使用 NumPy 函数

python - 如何提高 NLTK 的性能?备择方案?

python - 如何将数据重新组织到 pandas 中的新数据框中,以这种方式显示数据的更改?

python - 分配 pandas 数据框列 dtypes

python - 两个 numpy ndarray 上的数值运算

python - Pandas :什么是观点?

Python3-ldap key 错误 : 'attributes'

python - 如何过滤数据使用等于或大于 url 中的条件?

c# - 创建一个 Python COM 对象