Запись значений исходя из множества условий
Имею:
import pandas as pd
df = pd.DataFrame({'column1': ['name1', 'name2', 'name3'], 'column2': [100, 100, 500], 'column3': [100, '', 400]})
df
На выходе:
column1 column2 column3
0 name1 100 100
1 name2 100
2 name3 500 400
Задача:
В новую column4 вывести:
- "Условие_1" если column1 = name1 и column2 = column3
- "Условие_2" если column1 = name2 или name3 и column2 > column3
- "Значение пропущено" если в column2 или column3 есть пустота
- "Пропустить" во всех других случаях
Вот, что хочу получить:
column1 column2 column3 column4
0 name1 100 100 Услоавие_1
1 name2 100 Значение пропущено
2 name3 500 400 Услоавие_2
Буду благодарен за развернутый ответ, т.к. мои попытки решить не увенчались даже кусочком рабочего кода.
Какой вариант оптимальней будет применить? В обучающих статьях и ответах на аналогичные вопросы применяют разные методы.
Моя попытка решения:
df['column4'] = apply.[lambda x: "Условие_1" if x == 'name1' and df['column2']=df['column3'] else 'пропустить' for x in df['column1']]
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Входной фрейм (обратите внимание на NaN вместо '' во второй строке):
In [11]: df
Out[11]:
column1 column2 column3
0 name1 100 100.0
1 name2 100 NaN
2 name3 500 400.0
решение (орфография авторов для значений строк сохранена):
df.loc[df.query("column1 == 'name1' and column2 == column3").index, "column4"] = "Услоавие_1"
df.loc[df.query("column1 in ('name2', 'name3') and column2 > column3").index, "column4"] = "Услоавие_2"
df.loc[df["column2"].isna() | df["column3"].isna(), "column4"] = "Значение пропущено"
результат:
In [21]: df
Out[21]:
column1 column2 column3 column4
0 name1 100 100.0 Услоавие_1
1 name2 100 NaN Значение пропущено
2 name3 500 400.0 Услоавие_2