如何根据pandas DataFrame的category列规则替换outcome列对应值
错误原因说明
- 遍历写法报错:
df.loc[i, 'category']取到的是单个字符串,只有 pandas Series 才支持.str访问器,单个字符串直接用==判断相等、in判断包含即可。另外遍历行的写法在数据量大时效率极低,不推荐使用。 - map写法失效:
- 列顺序写反:你需要根据
category列的值做映射,而不是outcome列 - 赋值对象错误:你把映射结果赋值给了
category列,而非需要修改的outcome列 - 未处理匹配缺失:
map方法对不在映射字典里的键默认返回NaN,没有做回填保留原值的处理
- 列顺序写反:你需要根据
解决方案
场景1:仅匹配category完全等于指定值的情况
如果你需要严格匹配category值和字典的键,直接修正map写法,加fillna回填原有outcome值即可:
mapping = {'High':'Yes', 'Central':'Maybe', 'Low':'No'} df['outcome'] = df['category'].map(mapping).fillna(df['outcome'])
匹配不到的LowCentral行会直接保留原有的outcome值。
场景2:需要按关键词包含规则匹配的情况
如果你是要匹配category包含对应关键词就算命中(比如LowCentral包含Central就映射为Maybe),用np.select实现更灵活:
import numpy as np # 按优先级排列匹配条件 conditions = [ df['category'].str.contains('High'), df['category'].str.contains('Central'), df['category'].str.contains('Low') ] # 条件对应要设置的outcome值 choices = ['Yes', 'Maybe', 'No'] # default参数指定未匹配时保留原有outcome df['outcome'] = np.select(conditions, choices, default=df['outcome'])
内容的提问来源于stack exchange,提问作者apol96
相关产品推荐
相关产品推荐

