首页 > 解决方案 > 嵌套 numpy.where 函数

问题描述

我将几个简单的数据框添加在一起,由 1 列和 10 行组成。数据框中的每个元素可以是“1”、“0”或“P”

criteria_1 = df['c1] + df['c2'] + df['c3] + df['c4']
criteria_1_mapped = criteria_1.map(lambda x: 'P' if 'P' in x else sum(map(int, list(x))))
df["criteria 1"] = np.where(criteria_1_mapped == 4, "Fail", "Pass")
print(df["criteria 1"])

这会产生一个包含通过或失败值的数据帧。正是我想要的。但是有一个问题。当“Criteria_1”总和中出现“P”时,我希望它也出现在其中df["criteria 1"]

我正在尝试添加一个额外的 numpy where 语句来放置一个“p”,df["criteria 1"] 但我得到一个错误。说的是"raise ValueError(f"No axis named {axis} for object type {cls}")"

我尝试这样做时出现该错误:

criteria_1 = df['c1] + df['c2'] + df['c3] + df['c4']
criteria_1_mapped = criteria_1.map(lambda x: 'P' if 'P' in x else sum(map(int, list(x))))
is_P_in_dataframe = (criteria_1_mapped == "P").any(axis=1)
df["criteria 1"] = np.where(is_P_in_dataframe, "P", np.where(criteria_1_mapped == 4, "Fail", "Pass"))

我如何将 df["criteria 1"] 设置为“通过”、“失败”和“P”的任何想法

标签: pythonpandasdataframenumpy

解决方案


IIUC,您可以np.select按如下方式使用:

cond_list = [criteria_1_mapped.str.contains("P"), criteria_1_mapped == 4]
choice_list = ["P", "Fail"]
default = "Pass"

df["criteria_1"] = np.select(cond_list, choice_list, default=default)

np.select从左到右查看条件列表,无论在哪里找到匹配项,它都会从选择列表中返回相应的值。如果不满足任何条件,则返回默认值,即"Pass"此处。


推荐阅读