如何在Python中基于字典规则为Pandas DataFrame新增Result条件判断列?
实现Pandas DataFrame新增Result列的需求
我来帮你搞定这个需求,核心思路是先给Result列设默认值Yes,再找出那些满足「任意一列匹配字典对应值」的行,把它们的Result改成其他值(这里我用No做示例,你可以根据需要改成别的)。
完整代码实现
import pandas as pd import numpy as np to_check= {'ColA':'Yes', 'ColB':'Y','ColC':'True'} df = pd.DataFrame( { 'ID': ['AB01', 'AB02', 'AB03', 'AB04', 'AB05','AB06','AB07','AB08'], 'ColA': ["Yes","No",np.nan,"No", "Yes", "","", "No"], 'ColB': ["N","","Y","", "Y", np.nan,"", "N"], 'ColC': [np.nan,"True","False",np.nan,"False", "True", "",""], 'Type': [85,98,84,70,50,np.nan,85,74] } ) # 1. 初始化Result列为默认值'Yes' df['Result'] = 'Yes' # 2. 创建布尔掩码:判断每行是否有任意一列匹配to_check中的对应值 mask = pd.Series(False, index=df.index) for col, target_val in to_check.items(): mask |= (df[col] == target_val) # 3. 将满足条件的行的Result改为'No' df.loc[mask, 'Result'] = 'No' # 查看最终结果 print(df)
代码细节解释
- 初始化默认值:直接给新列
Result赋值Yes,这是所有行的初始状态。 - 构建匹配掩码:遍历
to_check字典的每一组「列名-目标值」,用|=(逻辑或)累加判断结果——只要某一行有任意一列匹配对应目标值,掩码就会标记为True。 - 更新目标行:用
loc精准定位到掩码为True的行,把它们的Result值替换成No(你可以根据需求改成其他内容,比如'Invalid'之类的)。
运行后的示例结果
最终你会得到包含Result列的完整DataFrame,部分行示例如下:
ID ColA ColB ColC Type Result 0 AB01 Yes N NaN 85.0 No 1 AB02 No True 98.0 No 2 AB03 NaN Y False 84.0 No 3 AB04 No NaN 70.0 Yes ...
注意:空字符串""和np.nan不会与to_check里的目标值匹配,所以这类行的Result会保持默认的Yes。
内容的提问来源于stack exchange,提问作者Fazli
相关产品推荐
相关产品推荐

