Я думаю, что, возможно, я бы попытался разбить условия на отдельные функции.Это становится довольно сложно ..
Может быть, что-то вроде этого ... Я не уверен, точно ли я прибил ваши условия
import pandas as pd
def evaluate(p1, p2, p3, p1_dog, p2_dog, p3_dog):
if p1_dog and p2_dog and p3_dog:
return p1
elif p2_dog and p3_dog:
# If you are getting here... p1_dog must be False
return p2
elif p3_dog:
# ...same here. p1_dog and p2_dog must be False
return p3
else:
return "I dont know what you want to happen here"
df = pd.DataFrame({'p1':['apple','orange'],
'p1_dog':[True, False],
'p2':['quick','start'],
'p2_dog':[True, True],
'p3':['ash','sword'],
'p3_dog':[False, False]})
df['final'] = [evaluate(*p) for p in zip(df['p1'], df['p2'], df['p3'],
df['p1_dog'], df['p2_dog'], df['p3_dog'])]
Если вы не хотите использовать отдельную функцию,проверьте этот пост `elif` в условных списках , чтобы получить подсказку о том, как использовать if-elif-else
в списочном понимании.
Также я заметил в вашем определении данных, что вы пишете свои логические значения(True
, False
) в скобках.Я предполагаю, что это ошибка.Функция, которую я написал, будет работать, только если они не в скобках, то есть не в строках, а в фактических логических значениях.