嵌套numpy.where函数

5m1hhzi4  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(129)

我正在添加几个简单的 Dataframe ,由1列和10行组成。 Dataframe 中的每个元素可以是“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"])

这会产生一个由通过或失败值组成的 Dataframe 。完全符合我的要求。但是有一个问题。当“P”出现在“criteria_1”sum中时,我希望它也出现在df["criteria 1"]中。
我尝试添加一个额外的numpy where语句来在df["criteria 1"]中放置一个“p”,但是我得到了一个错误,错误内容是"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[“标准1”]有“通过”,“失败”和“P”

3qpi33ja

3qpi33ja1#

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"

相关问题