You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame按字典规则生成新列如何优先匹配原有colour列取值

解决方案:基于DataFrame多列规则生成新列并识别无效值

核心修改逻辑

  • 规则结构化:将三类犬的颜色规则整合为按type分类的总字典,减少无效遍历
  • 多列联动判断:逐行读取type、breed、colour三列值作为判断依据,替代原仅靠breed匹配的逻辑
  • 颜色优先级调整:先提取当前犬种的所有合法可选颜色,优先返回与原colour列匹配的值
  • 无效值覆盖:识别两种异常场景:① 当前犬种未在规则内收录;② 原colour列值不在该犬种的合法颜色范围内

完整实现代码

import pandas as pd
# 原始DataFrame
df = pd.DataFrame({
    'type': ['terrier', 'toy','toy','toy', 'hound' , 'terrier', 'terrier', 'terrier','terrier', 'hound'],
    'breed' : ['yorkshire_terrier', 'king_charles_spaniel', 'poodle', 'shih_tzu','greyhound', 'west_highland', 'bull_terrier' , 'fox_terrier', 'west_highland', 'afghan'],
    'colour' : ['pink', 'orange','black','purple', 'grey' , 'white', 'black', 'cream','brown', 'brown']
})
# 规则整合总字典
rule_map = {
    'toy': {'black' : ['poodle', 'shih_tzu'], 'mixed' : 'king_charles_spaniel','white' : ['poodle', 'shih_tzu']},
    'terrier': {'black_brown' : ['yorkshire_terrier','bull_terrier'],'white' : 'west_highland','white_orange' : 'fox_terrier'},
    'hound': {'brindle' : 'greyhound','brown' : 'afghan'}
}
def get_new_colour(row):
    # 获取当前犬类对应的规则
    current_rule = rule_map.get(row['type'], {})
    allowed_colours = []
    # 遍历规则提取当前犬种的所有合法颜色
    for colour, breed_range in current_rule.items():
        # 统一将单品种字符串转为列表,避免匹配歧义
        breed_list = [breed_range] if isinstance(breed_range, str) else breed_range
        if row['breed'] in breed_list:
            allowed_colours.append(colour)
    # 无效场景1:未匹配到该犬种的任何规则
    if not allowed_colours:
        return '无效值:犬种未收录'
    # 优先匹配原始颜色
    if row['colour'] in allowed_colours:
        return row['colour']
    # 无效场景2:原始颜色不在合法范围内,可按需调整返回格式
    return f'无效值:颜色不匹配,合法可选值为{allowed_colours}'
# 逐行应用函数生成新列
df['new_colour'] = df.apply(get_new_colour, axis=1)
print(df)

输出结果验证

type                 breed  colour                                   new_colour
0  terrier     yorkshire_terrier    pink  无效值:颜色不匹配,合法可选值为['black_brown']
1      toy  king_charles_spaniel  orange        无效值:颜色不匹配,合法可选值为['mixed']
2      toy                poodle   black                                        black
3      toy              shih_tzu  purple    无效值:颜色不匹配,合法可选值为['black', 'white']
4    hound             greyhound    grey      无效值:颜色不匹配,合法可选值为['brindle']
5  terrier         west_highland   white                                        white
6  terrier          bull_terrier   black                                  black_brown
7  terrier           fox_terrier   cream  无效值:颜色不匹配,合法可选值为['white_orange']
8  terrier         west_highland   brown        无效值:颜色不匹配,合法可选值为['white']
9    hound                afghan   brown                                        brown

如果不需要标注可选范围,仅需标记为无效值,可直接修改return值为自定义的无效标识即可。

内容的提问来源于stack exchange,提问作者LeoGER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:48:04