Несколько способов сделать это, во-первых, ваш исходный код очень близок, вам просто нужно завершить присваивание:
df.loc[df['Flag'] == 1, 'Flag'] = df['val_1']
print(df)
Date val_1 val_2 Flag
0 2018-08-27 221.0 121.0 0.0
1 2018-08-28 222.0 122.0 222.0
2 2018-08-29 223.0 123.0 0.0
3 2018-08-30 224.0 124.0 2.0
4 2018-08-31 225.0 125.0 0.0
здесь вы фильтруете свой фрейм данных и заменяете значения, где условия совпадают. в этом случае, когда Flag равен единице.
, так как вы делаете многократные отборы, давайте использовать np.select
import numpy as np
conditions = [df['Flag'].eq(1),
df['Flag'].eq(2)]
choices = [df['val_1'],df['val_2']]
df['Flag'] = np.select(conditions,choices,default=df['Flag'])
Что это делает, это оценивает любые условия, которые у вас есть , оставив значение по умолчанию в качестве исходного столбца. Вы можете добавить больше условий и заключить оператор OR в круглые скобки с помощью | (труба) сепараторы. т.е. [(df['Flag'] == 1 | df['Flag'] == 2)]
Date val_1 val_2 Flag
0 2018-08-27 221.0 121.0 0.0
1 2018-08-28 222.0 122.0 222.0
2 2018-08-29 223.0 123.0 0.0
3 2018-08-30 224.0 124.0 124.0
4 2018-08-31 225.0 125.0 0.0