python - 嵌套 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”的任何想法
解决方案
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"
此处。
推荐阅读
- elixir - 使用保护子句自省函数
- java - Spring Boot Java 应用程序内存
- c# - 尝试在窗口服务中托管 .NET core 2.1 Web 应用程序会创建 dll 而不是 exe
- mysql - PHPMyAdmin 外键不可点击,因为用省略号缩短
- python-3.x - Alpha_vantage 产生错误
- java - 无法查看加密图像 - java
- icloud - 与其他用户共享 iCloud 键值存储
- jquery - 基于每天安排的单位的动态时间表
- php - 根据 Woocommerce 中的自定义字段有条件地设置产品销售价格
- javascript - Webpack 4 拆分块术语