基于条件填充DataFrame列异常:非2017年被错误标记为Yes
问题原因与修复方案
你的代码核心错误在于**week_nr的条件判断逻辑完全错误**:你用&(逻辑与)连接多个week_nr == X的条件,但一个数值不可能同时等于26、27、28等多个不同数字,这会导致整个条件表达式结果永远为False。结合你描述的异常现象,本质是判断周数是否属于目标列表的方式完全错误,才出现不符合预期的标记结果。
正确的做法是判断week_nr是否在目标周数列表中,以下是两种简洁的实现方式:
推荐方案:使用isin()方法
这种写法更简洁、可读性更高,也不容易出错:
# 定义假期周数列表 vacation_weeks = [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 42, 43, 44] # 填充is_vacation列 dfV['is_vacation'] = np.where((dfV['year'] == 2017) & (dfV['week_nr'].isin(vacation_weeks)), 'Yes', 'No')
备选方案:使用逻辑或|
如果坚持用多个条件判断,需要把&替换为|(逻辑或),表示week_nr等于其中任意一个值即可:
dfV['is_vacation'] = np.where((dfV['year'] == 2017) & (dfV['week_nr'] == 26) | (dfV['week_nr'] == 27) | (dfV['week_nr'] == 28) | (dfV['week_nr'] == 29) | (dfV['week_nr'] == 30) | (dfV['week_nr'] == 31) | (dfV['week_nr'] == 32) | (dfV['week_nr'] == 33) | (dfV['week_nr'] == 34) | (dfV['week_nr'] == 35) | (dfV['week_nr'] == 42) | (dfV['week_nr'] == 43) | (dfV['week_nr'] == 44), 'Yes', 'No')
内容的提问来源于stack exchange,提问作者afzb
相关产品推荐
相关产品推荐

