Оберните каждое отдельное условие в круглых скобках, а затем используйте оператор &
для объединения условий:
df.loc[(df['one'] >= df['two']) & (df['one'] <= df['three']), 'que'] = df['one']
Вы можете заполнить несоответствующие строки, просто используя ~
(" не ") для инвертирования соответствия:
df.loc[~ ((df['one'] >= df['two']) & (df['one'] <= df['three'])), 'que'] = ''
Вам нужно использовать &
и ~
, а не and
и not
, поскольку работают операторы &
и ~
элемент за элементом.
Конечный результат:
df
Out[8]:
one two three que
0 10 1.2 4.2 10
1 15 70 0.03
2 8 5 0
Я думаю, что лучший способ - создать функцию, которая будет обрабатывать строку за строкой:
прочитать строку и разделить на список через str.split()
Анализ каждого элемента с помощью RegEx . Например, ^[^:]+:\s*
поможет вам получить все, что находится перед «:».
Храните все обратно в нужном месте (используя, например, pandas Dataframe )