我正在尝试创建一个循环来创建许多基于布尔比较的变量。我一次查看三个变量,并根据观察是否具有 1,2 或三个这些标志来创建标志。
当我尝试查看 3 个变量时出现错误。奇怪的是,它适用于 1 或 2 个。我什至尝试过两次使用相同的变量(以检查它是否与变量无关),但这也不起作用。这是关于添加第三个变量的事情。
生成相似数据集
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:'不能使用单个布尔值索引到 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 个条件。
关于这里发生了什么的任何想法?