Вы можете сделать это, используя apply и tile, как показано ниже. Функция np.tile
повторяет массив с логическим индексом
df = pd.DataFrame([['A', 0, 1, 1, 0, 1, 1], ['B', 0, 1, 1, 0, 1, 1], ['C', 0, 0, 1, 1, 1, 1], ['D', 0, 0, 1, 1, 1, 1], ['E', 1, 1, 1, 1, 0, 1], ['F', 1, 1, 1, 1, 1, 1]], columns=('Type', '1', '2', '3', '4', '5', '6'))
def constraint(x, y):
print("x: ", x)
print("y: ", y)
return x
df.apply(lambda row: constraint(row[0], np.arange(2*len(row[1:]))[np.tile((row[1:]==1),2)]+1), axis=1)
ИЛИ используя цикл, подобный приведенному ниже
for i in range(len(df)):
row=df.iloc[i]
constraint(row[0], np.arange(2*len(row[1:]))[np.tile((row[1:]==1),2)]+1)