基于DataFrame列值条件生成status标签时第三条件不生效问题排查
问题原因
np.select是按顺序匹配条件的,只要前面的条件被满足,就会直接返回对应的结果,后面的条件不会再被检查。
你当前的条件列表里,第二个条件df['Id'] != df['created_by']已经包含了第三个条件的场景(因为第三个条件本身就是Id != created_by的子集)。所以当遇到Id=B,created_by=X的行时,第二个条件先被触发,直接返回category_2,第三个条件根本没机会被判断,自然不会生效。
解决方法
把更具体的条件放在前面,也就是把第三个条件移到第二个条件的前面,让优先级更高的规则先被匹配:
import pandas as pd import numpy as np # 模拟原始数据 df = pd.DataFrame({ 'Id': ['A', 'A', 'B', 'B'], 'created_by': ['A', '123', 'X', 'B'] }) # 调整条件顺序:先判断最具体的规则,再判断通用规则 conditions = [ df['Id'] == df['created_by'], (df['Id'] != df['created_by']) & (df['created_by'] == 'X'), df['Id'] != df['created_by'] ] result = ['category_1','category_3','category_2'] df['status'] = np.select(conditions, result, default='REST') print(df)
执行后得到的结果就是你期望的:
Id created_by status 0 A A category_1 1 A 123 category_2 2 B X category_3 3 B B category_1
内容的提问来源于stack exchange,提问作者Roshankumar
相关产品推荐
相关产品推荐

