我正在尝试创建一个循环来创建基于布尔比较的许多变量。我一次查看三个变量,并根据观察值是否有1、2或三个这样的标志来创建标志
当我试着看3个变量时,我得到了一个错误。奇怪的是,一两个就可以了。我甚至试过两次使用同一个变量(检查它是否与变量无关),但这也不起作用。它是关于添加第三个变量的
生成相似数据集
results = pd.DataFrame(np.random.randint(0,2,size=(20, 3)), columns=['Pre_BF_2014_Flag', 'BF_2014_Flag', 'XMAS_2014_Flag' ])
这是它看起来像硬编码,这是工作
results.loc[(results.Pre_BF_2014_Flag == 1) & (results.BF_2014_Flag == 0) &
(results.XMAS_2014_Flag == 0), 'Combo_2014_Pre_BF_Only'] = 1
我试着把这个循环(因为我有很多年和旗帜)
years= [2014, 2015, 2016, 2017, 2018]
var = ['_Flag']
for i in years:
for k in var:
results.loc[("results.Pre_BF_" + str(i) + str(k) == 1) &
("results.BF_" + str(i) + str(k) == 0) & ("results.XMAS_"+ str(i) +
str(k) == 0), 'Combo_2014_Pre_BF_Only'] = 1
显示错误
KeyError:'不能使用单个bool索引到setitem'
当我硬编码第三个条件时,它工作得很好
results.loc[("results.Pre_BF_" + str(i) + str(k) == 1) & ("results.BF_" + str(i) + str(k) == 0) & (results.XMAS_2014_Flag == 0), 'Combo_2014_Pre_BF_Only'] = 1
如果我使用XMAS变量作为第一个或第二个条件,也可以使用。它只是关于使用3个条件
你知道这里发生了什么事吗
小心点
"results.Pre_BF_" + str(i) + str(k)
表示字符串,而不是序列。不能对字符串使用矢量化布尔索引您可以按以下方式编写预期逻辑:
更好的方法是通过直接赋值构造布尔级数:
或者
相关问题 更多 >
编程相关推荐